|
72967
|
2621
|
15
|
2026-05-26T17:46:49.889901+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817609889_m2.jpg...
|
Dia
|
Personal: keychron Launc…
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Connect
Settings
Launcher - V1.3.4
Follow the
Connect
Settings
Launcher - V1.3.4
Follow the guide below to connect your device
1.
Connect your device using a cable or 2.4G receiver. (some models only support wired mode)
2.
Click the "Connect" button in the top left corner and select the device you want to set up.
launcher.keychron.com
launcher.keychron.com wants to connect to an HID device
Keychron Q1 HE - paired
Connect
Try Without An Keyboard
Try Without A Mouse
Toggle theme
launcher.keychron.com/#/not-connect
keychron Launcher...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.08976064,"top":0.13567439,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect","depth":8,"bounds":{"left":0.09773936,"top":0.13806863,"width":0.013297873,"height":0.009577015},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.07912234,"top":0.9385475,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Settings","depth":5,"bounds":{"left":0.08643617,"top":0.94014364,"width":0.012965426,"height":0.009577015},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Launcher - V1.3.4","depth":5,"bounds":{"left":0.08643617,"top":0.9656824,"width":0.027925532,"height":0.009577015},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Follow the guide below to connect your device","depth":5,"bounds":{"left":0.14594415,"top":0.090183556,"width":0.115359046,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1.","depth":6,"bounds":{"left":0.16023937,"top":0.17398244,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect your device using a cable or 2.4G receiver. (some models only support wired mode)","depth":6,"bounds":{"left":0.16489361,"top":0.17398244,"width":0.0731383,"height":0.03830806},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2.","depth":6,"bounds":{"left":0.31283244,"top":0.17398244,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Click the \"Connect\" button in the top left corner and select the device you want to set up.","depth":6,"bounds":{"left":0.31715426,"top":0.17398244,"width":0.10172872,"height":0.024740623},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.3174867,"top":0.2330407,"width":0.003656915,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"launcher.keychron.com","depth":5,"bounds":{"left":0.3254654,"top":0.23224261,"width":0.030917553,"height":0.007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"launcher.keychron.com wants to connect to an HID device","depth":7,"bounds":{"left":0.31648937,"top":0.26177174,"width":0.0774601,"height":0.007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Keychron Q1 HE - paired","depth":7,"bounds":{"left":0.32014626,"top":0.28810853,"width":0.03324468,"height":0.007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect","depth":8,"bounds":{"left":0.3949468,"top":0.3782921,"width":0.012965426,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":7,"bounds":{"left":0.2486702,"top":0.47246608,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Try Without An Keyboard","depth":6,"bounds":{"left":0.25598404,"top":0.47326416,"width":0.047539894,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":7,"bounds":{"left":0.32513297,"top":0.47246608,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Try Without A Mouse","depth":6,"bounds":{"left":0.33211437,"top":0.47326416,"width":0.039893616,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.4637633,"top":0.075019956,"width":0.0056515955,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Toggle theme","depth":6,"bounds":{"left":0.47473404,"top":0.07102953,"width":0.008976064,"height":0.021548284},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.47639626,"top":0.075019956,"width":0.0056515955,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"launcher.keychron.com/#/not-connect","depth":5,"bounds":{"left":0.118351065,"top":0.02952913,"width":0.1100399,"height":0.023942538},"on_screen":true,"automation_id":"navigationBarAssistantBarTextField","value":"launcher.keychron.com/#/not-connect","role_description":"text entry area","is_focused":false},{"role":"AXStaticText","text":"keychron Launcher","depth":7,"bounds":{"left":0.011635638,"top":0.10814046,"width":0.03723404,"height":0.011971269},"on_screen":true,"role_description":"text"}]...
|
2442020182210618713
|
-361872107711411143
|
visual_change
|
accessibility
|
NULL
|
Connect
Settings
Launcher - V1.3.4
Follow the
Connect
Settings
Launcher - V1.3.4
Follow the guide below to connect your device
1.
Connect your device using a cable or 2.4G receiver. (some models only support wired mode)
2.
Click the "Connect" button in the top left corner and select the device you want to set up.
launcher.keychron.com
launcher.keychron.com wants to connect to an HID device
Keychron Q1 HE - paired
Connect
Try Without An Keyboard
Try Without A Mouse
Toggle theme
launcher.keychron.com/#/not-connect
keychron Launcher...
|
72966
|
NULL
|
NULL
|
NULL
|
|
72966
|
2621
|
14
|
2026-05-26T17:46:46.688747+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817606688_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFileEdiViewTabsBookmarkHistoryExtensionsWindowH DiaFileEdiViewTabsBookmarkHistoryExtensionsWindowHelpnuncher.kevchron.comlDXP4800PLUS-85F8GS07X0 8• Tue 26 May 20:46:46i@O©@Chat•0000*06.wes Garmin DachboardB keychron Launcher- New ThbLauncher+ NawThabash +vMm .lc x...
|
NULL
|
-1057593834522152966
|
NULL
|
visual_change
|
ocr
|
NULL
|
DiaFileEdiViewTabsBookmarkHistoryExtensionsWindowH DiaFileEdiViewTabsBookmarkHistoryExtensionsWindowHelpnuncher.kevchron.comlDXP4800PLUS-85F8GS07X0 8• Tue 26 May 20:46:46i@O©@Chat•0000*06.wes Garmin DachboardB keychron Launcher- New ThbLauncher+ NawThabash +vMm .lc x...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72965
|
2621
|
13
|
2026-05-26T17:46:45.508837+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817605508_m2.jpg...
|
Dia
|
Personal: New Tab
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
launcher.keychron.com
New Tab
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"launcher.keychron.com","depth":5,"bounds":{"left":0.19015957,"top":0.02952913,"width":0.080119684,"height":0.023942538},"on_screen":true,"automation_id":"navigationBarAssistantBarTextField","value":"launcher.keychron.com","role_description":"text entry area","is_focused":false},{"role":"AXStaticText","text":"New Tab","depth":7,"bounds":{"left":0.08344415,"top":0.10814046,"width":0.01761968,"height":0.011971269},"on_screen":true,"role_description":"text"}]...
|
7957883983277363838
|
-5982564175246613093
|
typing_pause
|
hybrid
|
NULL
|
launcher.keychron.com
New Tab
Dia••0= DXP4800PLUS- launcher.keychron.com
New Tab
Dia••0= DXP4800PLUS-85F8WewooouknHistorycachsionaWindowhelte roworhosPersonal vselt hoseeuatreGarmin DashboardB keychron Launcher- New ThbNew tab+ NawTh600%L7*• Tue 26 May 20:46:4518 0=01a availablHbash +vMM .lc x0.05...
|
72962
|
NULL
|
NULL
|
NULL
|
|
72964
|
2620
|
8
|
2026-05-26T17:46:45.404304+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817605404_m1.jpg...
|
Dia
|
Personal: New Tab
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
launcher.keychron.com
New Tab
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"launcher.keychron.com","depth":5,"on_screen":true,"automation_id":"navigationBarAssistantBarTextField","value":"launcher.keychron.com","role_description":"text entry area","is_focused":false},{"role":"AXStaticText","text":"New Tab","depth":7,"on_screen":true,"role_description":"text"}]...
|
7957883983277363838
|
-5982564175246613093
|
typing_pause
|
hybrid
|
NULL
|
launcher.keychron.com
New Tab
FirefoxFileEditViewH launcher.keychron.com
New Tab
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp100% C78 • Tue 26 May 20:46:45pmsetDOCKER• ₴1DEV (docker)O 82APP (-zsh)• 83ts=1pending_frames=13total_pairs=113total_evicted=83total_failed=0"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.2026-05-26T20:45:37.784009ZINFOscreenpipe_engine:: frame_2026-05-26120:45:39.8060284INFOlinker_actor:screenpipe_engine::frame_linker_actor:frame_linker: pairedframe→events (events arrived first)frame_frame_linker: paired frame→events (eventsarrived first) frame_id=72929 paired=1 still_pending=02026-05-26T20:45:47.855586ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:45:52.585883ZINFOscreenpipe._engine:: frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72933 paired-1 still_pending=02026-05-26T20:45:52.625874ZINFOscreenpipe.engine: :event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957,trigger=click)2026-05-26T20:45:56.264229ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-119 row_id=74177 frame_id=729342026-05-26T20:46:01.803375ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames2026-05-26T20:46:02.267559ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72938 paired-1 still_pending=02026-05-26T20:46:02.271523ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3421085833146907168,trigger=typing_pause)2026-05-26120:46:02.$764137INFOscreenpipe.2026-05-26T20:46:02.815754ZINFOengine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)2026-05-26T20:46:03.657199ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 8 frames, 1.8MB → 1.1MB (1.6x), 8 JPEGSdeletedscreenpipe_engine:: frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-121row_id=74180frame_id=729372026-05-26T20:46:04.244805ZINFOscreenpipeengine::snapshot_compaction: snapshot compaction: 9 frames,1.6MB → 1.0MB (1.5x), 9 JPEGs deleted2026-05-26T20:46:06.391706ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168,2026-05-26T20:46:07.184824ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrivedtrigger=typing_pause)first) corr_id=122 row_id=74184 frame_id=729382026-05-26T20:46:07.454911ZWARNscreenpipe_engine:: frame_ts=0pending_frames=16total_pairs-120total_evicted=84linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_even2026-05-26T20:46:12.937588ZWARNtotal_failed=0screenpipe_engine:: frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1pending_frames=15total_pairs=120total_evicted=86 total_failed=02026-05-26T20:46:12.937736ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame›events (events arrived first) frame_id=72941 paired-1 still_pending=02026-05-26T20:46:16.984303ZINFO2026-05-26T20:46:17.069561ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (eventsarrived first) frame_id=72943 paired-1 still_pending=0screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4251890987288014344, trigger=typing_pause)2026-05-26T20:46:19.027309ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=0pending_frames=15total pairs=122total_evicted-88 total_failed=02026-05-26T20:46:19.028000ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-125 row_id=74187 frame_id=729452026-05-26T20:46:20.588201ZINFOscreenpipe_engine:: frame2026-05-26T20:46:29.033924Z_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72947paired-1 still_pending=0INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:31.055278ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=0pending_frames=11total_pairs=124total_evicted=93 total_failed=02026-05-26T20:46:31.055389ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72950 paired=1 still_pending=02026-05-26T20:46:31.237795ZINFO2026-05-26T20:46:31.770518ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)screenpipe_engine::frame_linker_actor: frame_linker: paired frame»events (events arrived first) frame_id=72954 paired-1 still_pending=02026-05-26T20:46:31.888656ZINFOscreenpipe_engine::event,_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:32.230650ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:32.558671ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:33.537121ZINFO2026-05-26T20:46:37.276083Zscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-129 row_id=74191 frame_id=72954INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72955 paired-1 still_pending=02026-05-26T20:46:38.290132ZWARNscreenpipe_engine:: frame.linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0pending_frames=11total_pairs=128total_evicted=972026-05-26T20:46:38.290342Ztotal_failed=0INFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (eventsarrived first) frame_id=72958 paired=12026-05-26T20:46:42.838163ZWARNstill_pending=0screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted-1 pending_events=1pending_frames=10 total_pairs=129total_evicted=98 total_failed=02026-05-26T20:46:42.838330ZINFO screenpipe_engine:: framelinker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72960 paired-1 still_pending=0...
|
72963
|
NULL
|
NULL
|
NULL
|
|
72962
|
2621
|
12
|
2026-05-26T17:46:42.955173+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817602955_m2.jpg...
|
Dia
|
Personal: New Tab
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
lauburu bag laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
lauburu bags
laubali ne demek
laubman and pank
lauber
l'auberge
More
New Tab...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"laub","depth":4,"bounds":{"left":0.41589096,"top":0.46288908,"width":0.23603724,"height":0.018355945},"on_screen":true,"automation_id":"commandBarTextField","value":"laub","role_description":"text entry area","is_focused":true},{"role":"AXStaticText","text":"laub","depth":7,"bounds":{"left":0.41655585,"top":0.5051876,"width":0.009973404,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"— Google","depth":7,"bounds":{"left":0.42652926,"top":0.5051876,"width":0.020944148,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧⌘↩","depth":7,"bounds":{"left":0.63796544,"top":0.50359136,"width":0.01462766,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"laub","depth":7,"bounds":{"left":0.41655585,"top":0.5371109,"width":0.009973404,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"— Chat","depth":7,"bounds":{"left":0.42652926,"top":0.5371109,"width":0.015957447,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃⌘↩","depth":7,"bounds":{"left":0.63796544,"top":0.5355148,"width":0.01462766,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"lauburu bags","depth":7,"bounds":{"left":0.41655585,"top":0.56903434,"width":0.028922873,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"laubali ne demek","depth":7,"bounds":{"left":0.41655585,"top":0.6009577,"width":0.036901597,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"laubman and pank","depth":7,"bounds":{"left":0.41655585,"top":0.6328811,"width":0.039893616,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"lauber","depth":7,"bounds":{"left":0.41655585,"top":0.66480446,"width":0.01462766,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"l'auberge","depth":7,"bounds":{"left":0.41655585,"top":0.6967279,"width":0.021609042,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"More","depth":3,"bounds":{"left":0.45611703,"top":0.698324,"width":0.009973404,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"New Tab","depth":7,"bounds":{"left":0.08344415,"top":0.10814046,"width":0.01761968,"height":0.011971269},"on_screen":true,"role_description":"text"}]...
|
-7923415931555815431
|
485017956320321
|
typing_pause
|
accessibility
|
NULL
|
laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
lauburu bag laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
lauburu bags
laubali ne demek
laubman and pank
lauber
l'auberge
More
New Tab...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72963
|
2620
|
7
|
2026-05-26T17:46:42.838135+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817602838_m1.jpg...
|
Dia
|
Personal: New Tab
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
More
New Ta laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
More
New Tab...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"laub","depth":4,"on_screen":true,"automation_id":"commandBarTextField","value":"laub","role_description":"text entry area","is_focused":true},{"role":"AXStaticText","text":"laub","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"— Google","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧⌘↩","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"laub","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"— Chat","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃⌘↩","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"More","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"New Tab","depth":7,"on_screen":true,"role_description":"text"}]...
|
-61452799589467101
|
230027578184827969
|
typing_pause
|
hybrid
|
NULL
|
laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
More
New Ta laub
laub
— Google
⇧⌘↩
laub
— Chat
⌃⌘↩
More
New Tab
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp3 • Tue 26 May 20:46:42pmsetDOCKERO 81DEV (docker)O ₴2APP (-zsh)• 832026-05-26T20:45:34.801124ZINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 2 Chash=-8761272"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.2026-05-26T20:45:36.205773ZINFO2026-05-26T20:45:37.783786ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_iascreenpipe_engine:: frame_linker_actor: frame_linker: stale entries expired without pairing (frame orevent never arrived) evicted=2 pending_events=1pending_frames=13total_pairs=113total_evicted=83 total_failed=02026-05-26T20:45:37.784009ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: pairedframe→events (eventsarrived first) frame_id=72927 paired-1 still_pending=02026-05-26T20:45:39.806028ZINFOscreenpipe_engine:: frame._linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72929 paired=1still_pending=02026-05-26T20:45:47.8555867INFOscreenpipe_engine:: event.2026-05-26T20:45:52.585883ZINFO_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72933 paired-1 still_pending=02026-05-26T20:45:52.625874ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 Chash=-5575582890517815957,2026-05-26T20:45:56.trigger=click).264229ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-119 row_id-74177 frame_id=729342026-05-26120:46:01..803375ZINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: found 17 eligible frames2026-05-26T20:46:02.267559ZINFO2026-05-26T20:46:02.271523ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72938paired-1 still_pending=0screenpipe_engine::event_driven_capture: content dedup: skippingcapture for monitor 1 (hash=3421085833146907168,trigger=typing_pause)2026-05-26T20:46:02.376213ZINFOscreenpipe_engine::event,_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)2026-05-26T20:46:02.815754ZINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 8 frames, 1.8MB → 1.1MB (1.6x), 8 JPEGs deleted2026-05-26T20:46:03.657199ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: pairedevent+frame (framearrived first) corr_id=121row_id=74180 frame_id=729372026-05-26T20:46:04.244805ZINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 9 frames, 1.6MB → 1.0MB (1.5x), 9 JPEGs deleted2026-05-26T20:46:06.391706ZINFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=3421085833146907168,2026-05-26T20:46:07..184824ZINFOtrigger=typing_pause)screenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-122 row_id=74184 frame_id=729382026-45-2670:46:474549117WARNscreenpipe_engine:: frame.linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted-1 pending_events=0pending_frames=16 total_pairs=120total_evicted=84 total_failed=02026-05-26T20:46:12.937588Zts=1pending_frames=15WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_eventotal_pairs=120 total_evicted=86 total_failed=02026-05-26T20:46:12.937736ZINFO screenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72941 paired-1 still_pending=02026-05-26T20:46:16.984303ZINFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (eventsarrived first) frame_id=72943 paired-1 still_pending=02026-05-26T20:46:17.069561ZINFO2026-05-26T20:46:19.027309ZWARNscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4251890987288014344, trigger=typing_pause)screenpipe_engine:: framets=0pending_frames=15linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_eventotal_pairs-122 total_evicted 88 total_failed-02026-05-26T20:46:19.028000ZINFO2026-05-26T20:46:20.588201ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: pairedevent»frame (frame arrived first) corr_id-125 row_id=74187 frame_id=72945screenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id=72947 paired=1 still_pending=02026-05-26T20:46:29.033924ZINFO2026-05-26T20:46:31.055278ZWARNscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)screenpipe_engine:: frame.ts=0pending_frames=11total_pairs=124linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_eventotal_evicted=93 total_failed=02026-05-26T20:46:31.055389ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72950 paired-1 still_pending=02026-05-26T20:46:31.237795ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:31.770518ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72954 paired=1 still_pending=02026-05-26T20:46:31.888656ZINFO2026-05-26T20:46:32.230650ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5575582890517815957, trigger=click)screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:32.558671ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:33.537121ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first) corr_id-129 row_id=74191 frame_id=729542026-05-26T20:46:37.276083ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events2026-05-26T20:46:38.290132ZWARNarrived first) frame_id=72955 paired=1 still_pending=0ts=0pending_frames=11screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted-4 pending_eventotal_pairs=128total_evicted=97total_failed=02026-05-26T20:46:38.290342ZINFOscreenpipe_engine:: framelinker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72958 paired-1 still_pending=0...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72961
|
2621
|
11
|
2026-05-26T17:46:40.313499+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817600313_m2.jpg...
|
Dia
|
Personal: New Tab
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
More
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"More","depth":3,"bounds":{"left":0.45611703,"top":0.50039905,"width":0.009973404,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
-4293832759063844783
|
-4293832759063844783
|
visual_change
|
hybrid
|
NULL
|
More
Dia••0DXP4800PLUS-85F8WiewooouknHistorycachsi More
Dia••0DXP4800PLUS-85F8WiewooouknHistorycachsionaWindowHelp100% 148. Tue 26 May 20:46:3918 0 =01e roworhosPersonal ySelf-Hosted DashGarmin DashboardB keychron Launcher- New ThbNew tab+ NawTh6a availabl0 Ask anything…—Add thbs or eshibash +vMM .Ic xDia works best as your default browse:Try it for a weekSet Dia as defautt...
|
72960
|
NULL
|
NULL
|
NULL
|
|
72960
|
2621
|
10
|
2026-05-26T17:46:38.389626+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817598389_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron L Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher- New ThboooroniinhatonycxtchsionsWindowHeltspp.staging.jiminny.com/Jiminry/E Pull Requests• New Tab8 Jiminny+ New TabI JIMINNYJY-20855-ES-mapping-only • 893537@ •Chat100% K$2- • Tue 26 May 20:46:38• 08000a availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEUbash +vMM.lc x8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Prinacx Polisoy and Ierms ol ServiceTERMSKNOWLEDGE BASE | BLOG...
|
NULL
|
-8730592968306069829
|
NULL
|
click
|
ocr
|
NULL
|
Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron L Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher- New ThboooroniinhatonycxtchsionsWindowHeltspp.staging.jiminny.com/Jiminry/E Pull Requests• New Tab8 Jiminny+ New TabI JIMINNYJY-20855-ES-mapping-only • 893537@ •Chat100% K$2- • Tue 26 May 20:46:38• 08000a availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEUbash +vMM.lc x8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Prinacx Polisoy and Ierms ol ServiceTERMSKNOWLEDGE BASE | BLOG...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72959
|
2620
|
6
|
2026-05-26T17:46:37.379891+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817597379_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp8 • Tue 26 May 20:46:37screenpipe"DOCKERO 81DEV (docker)O ₴2APP (-zsh)• 832026-05-26120:45:33.635766ZINFOscreenpipe_engine::event_driven_capture:content dedup:skipping capture for monitor 1 (hash=-876127:"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.2026-05-26T20:45:33.720780ZINFO2026-05-26T20:45:34.134973Zscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272~INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first)corr_id=114 row_id=74171 frame_id=729252026-05-26T20:45:34.187590ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:34.801124ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531,2026-05-26T20:45:36.205773ZINFOscreenpipe_engine:: frame._linker_actor: frame_linker: paired event+frame (frame arrived first)trigger=typing_pause)corr_id=115 row_id=74172 frame_id=729252026-05-26T20:45:37.783786ZWARNscreenpipe_engine:: framets=1pending_frames=13total_pairs=113total_evicted=83linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_even2026-05-26120:45:37..784009ZINFOtotal_failed=0screenpipe_engine::frame_linker_actor:frame_linker: paired frame+events (events arrived first) frame_id=72927 paired-1 still_pending=02026-05-26T20:45:39.806028ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame›events (events arrived first) frame_id=72929 paired-1 still_pending=02026-05-26120:45:47.855586ZINFOscreenpipe_2026-05-26T20:45:52.585883ZINFOengine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26120:45:52.6258747INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72933 paired-1still_pending=0screenpipe_engine:: event._driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:45:56.264229ZINFOscreenpipe.engine: : framelinker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-119 row_id=74177 frame_id=729342026-05-26T20:46:01.803375ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames2026-05-26T20:46:02.267559ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72938 paired-1 still_pending=02026-05-26T20:46:02.271523ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3421085833146907168,trigger=typing_pause)2026-05-26T20:46:02.376213ZINFOscreenpipe_engine:: event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)2026-05-26T20:46:02.815754ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 8 frames, 1.8MB 1.1MB (1.6X), 8 JPEGs deleted2026-05-26T20:46:03.657199ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id=121 row_id=74180 frame_id=729372026-05-26T20:46:04.244805ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.6MB → 1.OMB (1.5x), 9 JPEGs deleted2026-05-26T20:46:06.391706ZINFO2026-05-26T20:46:07.184824ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)screenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first) corr_id=122 row_id=74184 frame_id=729382026-05-26T20:46:07.454911ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted-1 pending_events=0 pending_frames=16total_pairs=120total_evicted 84 total_failed=02026-05-26T20:46:12.937588ZWARNevent neverts=1pending_frames-15screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame ortotal_pairs=120arrived) evicted=2 pending_even2026-05-26T20:46:12.937736Ztotal_evicted=86 total_failed=0INFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72941 paired-1 still_pending=02026-05-26T20:46:16.984303ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id=72943 paired-1 still_pending=02026-05-26T20:46:17.069561ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4251890987288014344, trigger=typing_pause)2026-05-26T20:46:19.027309ZWARNscreenpipe_engine:: frame.linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=0pending_frames=15total_pairs=122 total_evicted=882026-05-26T20:46:19.028000ZINFOtotal_failed=0screenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first) corr_id=125 row_id=74187 frame_id=729452026-05-26T20:46:20.588201ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72947 paired-1 still_pending=02026-05-26T20:46:29.033924ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:31.055278ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=0pending_frames=11total_pairs-124 total_evicted=93 total_failed=02026-05-26T20:46:31.055389ZINFO screenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (eventsarrived first) frame_id=72950 paired-1 still_pending=02026-05-26T20:46:31.237795ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:31.770518ZINFOscreenpipe_engine:: frame._linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72954 paired-1 still_pending-02026-05-26T20:46:31.888656ZINFOscreenpipe_engine:: event.2026-05-26T20:46:32.230650ZINFO_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:32.558671ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:33.537121ZINFO screenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id-129 row_id=74191 frame_id=72954...
|
NULL
|
-2615154381155012433
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp8 • Tue 26 May 20:46:37screenpipe"DOCKERO 81DEV (docker)O ₴2APP (-zsh)• 832026-05-26120:45:33.635766ZINFOscreenpipe_engine::event_driven_capture:content dedup:skipping capture for monitor 1 (hash=-876127:"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.2026-05-26T20:45:33.720780ZINFO2026-05-26T20:45:34.134973Zscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272~INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first)corr_id=114 row_id=74171 frame_id=729252026-05-26T20:45:34.187590ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:34.801124ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531,2026-05-26T20:45:36.205773ZINFOscreenpipe_engine:: frame._linker_actor: frame_linker: paired event+frame (frame arrived first)trigger=typing_pause)corr_id=115 row_id=74172 frame_id=729252026-05-26T20:45:37.783786ZWARNscreenpipe_engine:: framets=1pending_frames=13total_pairs=113total_evicted=83linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_even2026-05-26120:45:37..784009ZINFOtotal_failed=0screenpipe_engine::frame_linker_actor:frame_linker: paired frame+events (events arrived first) frame_id=72927 paired-1 still_pending=02026-05-26T20:45:39.806028ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame›events (events arrived first) frame_id=72929 paired-1 still_pending=02026-05-26120:45:47.855586ZINFOscreenpipe_2026-05-26T20:45:52.585883ZINFOengine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26120:45:52.6258747INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72933 paired-1still_pending=0screenpipe_engine:: event._driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:45:56.264229ZINFOscreenpipe.engine: : framelinker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-119 row_id=74177 frame_id=729342026-05-26T20:46:01.803375ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames2026-05-26T20:46:02.267559ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72938 paired-1 still_pending=02026-05-26T20:46:02.271523ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3421085833146907168,trigger=typing_pause)2026-05-26T20:46:02.376213ZINFOscreenpipe_engine:: event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)2026-05-26T20:46:02.815754ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 8 frames, 1.8MB 1.1MB (1.6X), 8 JPEGs deleted2026-05-26T20:46:03.657199ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id=121 row_id=74180 frame_id=729372026-05-26T20:46:04.244805ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.6MB → 1.OMB (1.5x), 9 JPEGs deleted2026-05-26T20:46:06.391706ZINFO2026-05-26T20:46:07.184824ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)screenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first) corr_id=122 row_id=74184 frame_id=729382026-05-26T20:46:07.454911ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted-1 pending_events=0 pending_frames=16total_pairs=120total_evicted 84 total_failed=02026-05-26T20:46:12.937588ZWARNevent neverts=1pending_frames-15screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame ortotal_pairs=120arrived) evicted=2 pending_even2026-05-26T20:46:12.937736Ztotal_evicted=86 total_failed=0INFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72941 paired-1 still_pending=02026-05-26T20:46:16.984303ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id=72943 paired-1 still_pending=02026-05-26T20:46:17.069561ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4251890987288014344, trigger=typing_pause)2026-05-26T20:46:19.027309ZWARNscreenpipe_engine:: frame.linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=0pending_frames=15total_pairs=122 total_evicted=882026-05-26T20:46:19.028000ZINFOtotal_failed=0screenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first) corr_id=125 row_id=74187 frame_id=729452026-05-26T20:46:20.588201ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72947 paired-1 still_pending=02026-05-26T20:46:29.033924ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:31.055278ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=0pending_frames=11total_pairs-124 total_evicted=93 total_failed=02026-05-26T20:46:31.055389ZINFO screenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (eventsarrived first) frame_id=72950 paired-1 still_pending=02026-05-26T20:46:31.237795ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:31.770518ZINFOscreenpipe_engine:: frame._linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72954 paired-1 still_pending-02026-05-26T20:46:31.888656ZINFOscreenpipe_engine:: event.2026-05-26T20:46:32.230650ZINFO_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:32.558671ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:33.537121ZINFO screenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id-129 row_id=74191 frame_id=72954...
|
72956
|
NULL
|
NULL
|
NULL
|
|
72958
|
2621
|
9
|
2026-05-26T17:46:37.276078+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817597276_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron L Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher- New ThboooroniinhatonycxtchsionsWindowHeltspp.staging.jiminny.com/Jiminry/E Pull Requests• New Tab8 Siminny+ New TabJIMINNYJY-20855-ES-mapping-only • 893537@ •Chat100% K$2- • Tue 26 May 20:46:36• 0000a availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEUbash +vMM.lc x8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Prinacx Polisoy and Ierms ol ServiceTERMSKNOWLEDGE BASE | BLOG...
|
NULL
|
8729085979914120946
|
NULL
|
click
|
ocr
|
NULL
|
Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron L Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher- New ThboooroniinhatonycxtchsionsWindowHeltspp.staging.jiminny.com/Jiminry/E Pull Requests• New Tab8 Siminny+ New TabJIMINNYJY-20855-ES-mapping-only • 893537@ •Chat100% K$2- • Tue 26 May 20:46:36• 0000a availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEUbash +vMM.lc x8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Prinacx Polisoy and Ierms ol ServiceTERMSKNOWLEDGE BASE | BLOG...
|
72957
|
NULL
|
NULL
|
NULL
|
|
72957
|
2621
|
8
|
2026-05-26T17:46:35.504654+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817595504_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron L Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher- New ThboooroniinhatonycxtchsionsWindowHeltspp.staging.jiminny.com/JiminnyE Pull Requests• New Tab8 Jiminny+ New TabJIMINNY1Y.20855.FC.mannine.onlv-892527@ •Chat100% K$2- • Tue 26 May 20:46:35• 08000a availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEUbash +vmm .c x8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Rrivacy Peliscy and Ierms el Service,TERMSKNOWLEDGE BASE | BLOG...
|
NULL
|
-455349480599685520
|
NULL
|
visual_change
|
ocr
|
NULL
|
Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron L Dia••0DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher- New ThboooroniinhatonycxtchsionsWindowHeltspp.staging.jiminny.com/JiminnyE Pull Requests• New Tab8 Jiminny+ New TabJIMINNY1Y.20855.FC.mannine.onlv-892527@ •Chat100% K$2- • Tue 26 May 20:46:35• 08000a availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEUbash +vmm .c x8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Rrivacy Peliscy and Ierms el Service,TERMSKNOWLEDGE BASE | BLOG...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72956
|
2620
|
5
|
2026-05-26T17:46:33.642156+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817593642_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp8 • Tue 26 May 20:46:33screenpipe"DOCKERO 81DEV (docker)O ₴2APP (-zsh)• 832026-05-26T20:45:33.578917ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: pairedevent→frame(framearrived first)corr_ie"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.2026-05-26T20:45:33.635766ZINFO2026-05-26T20:45:33.720780ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272~screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:34.134973ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id-114 row_id=74171 frame_id=729252026-05-26T20:45:34.187590ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:34.801124ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531,trigger=typing_pause)2026-05-26T20:45:36.205773ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first)corr_id-115 row_id=74172 frame_id=729252026-05-26T20:45:37.783786ZWARNscreenpipe_engine:: frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1pending_frames=13total_pairs=113total_evicted=83total_failed=02026-05-26T20:45:37.784009ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72927 paired=1 still_pending=02026-05-26T20:45:39.8060287INFOscreenpipe.engine:: frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72929 paired=1 still_pending=02026-05-26T20:45:47.855586ZINFO2026-05-26120:45:5215858834INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrivedfirst) frame_id=72933 paired-1still_pending=02026-05-26T20:45:52.625874ZINFOscreenpipeengine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:45:56.264229ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first)corr_id=119 row_id=74177 frame_id=729342026-05-26T20:46:01.803375ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames2026-05-26T20:46:02.267559ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72938 paired-1 still_pending=02026-05-26T20:46:02.271523ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3421085833146907168,trigger=typing_pause)2026-05-26T20:46:02.376213ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)2026-05-26T20:46:02.815754ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 8 frames, 1.8MB → 1.1MB (1.6x), 8 JPEGs deleted2026-05-26T20:46:03.657199ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-121 row_id=74180 frame_id=729372026-05-26T20:46:04.244805ZINFO2026-05-26T20:46:06.391706ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.6MB → 1.0MB (1.5x), 9 JPEGs deletedscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168,trigger=typing_pause)2026-05-26T20:46:07.184824ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-122 row_id=74184 frame_id=729382026-05-26T20:46:07.454911ZWARNscreenpipe_engine:: frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted-1 pending_events=0pending_frames=16total_pairs=120total_evicted=84 total_failed=02026-05-26T20:46:12.937588ZWARNscreenpipe_engine:: frame_ts=1pending_frames=15total_pairs=120linker_actor:frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_eventotal_evicted=86 total_failed=02026-05-26T20:46:12.937736ZINFO2026-05-26T20:46:16.984303ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72941 paired-1 still_pending=0screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72943 paired-1 still_pending=02026-05-26T20:46:17.069561ZINFO2026-05-26T20:46:19.027309ZWARNscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4251890987288014344, trigger=typing_pause)screenpipe_engine:: frame.ts=0pending_frames=15total_pairs=122linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_eventotal_evicted-88 total_failed=02026-05-26T20:46:19.028000ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id-125 row_id=74187 frame_id=729452026-05-26T20:46:20.588201ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (eventsarrived first) frame_id=72947 paired-1 still_pending=02026-05-26T20:46:29.033924ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:31.055278ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=0pending_frames=11total_pairs=124total_evicted=93 total_failed=02026-05-26T20:46:31.055389ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: pairedframe+events (events arrived first) frame_id=72950 paired=1 still_pending=02026-05-26T20:46:31.237795ZINFOscreenpipe_engine: :event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:31.770518ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72954 paired=1 still_pending=02026-05-26T20:46:31.888656ZINFO2026-05-26T20:46:3212306507INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5575582890517815957, trigger=click)screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:32.558671ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)...
|
NULL
|
-6781082958168060392
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp8 • Tue 26 May 20:46:33screenpipe"DOCKERO 81DEV (docker)O ₴2APP (-zsh)• 832026-05-26T20:45:33.578917ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: pairedevent→frame(framearrived first)corr_ie"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.2026-05-26T20:45:33.635766ZINFO2026-05-26T20:45:33.720780ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272~screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:34.134973ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id-114 row_id=74171 frame_id=729252026-05-26T20:45:34.187590ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:34.801124ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531,trigger=typing_pause)2026-05-26T20:45:36.205773ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first)corr_id-115 row_id=74172 frame_id=729252026-05-26T20:45:37.783786ZWARNscreenpipe_engine:: frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=1pending_frames=13total_pairs=113total_evicted=83total_failed=02026-05-26T20:45:37.784009ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72927 paired=1 still_pending=02026-05-26T20:45:39.8060287INFOscreenpipe.engine:: frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72929 paired=1 still_pending=02026-05-26T20:45:47.855586ZINFO2026-05-26120:45:5215858834INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrivedfirst) frame_id=72933 paired-1still_pending=02026-05-26T20:45:52.625874ZINFOscreenpipeengine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:45:56.264229ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first)corr_id=119 row_id=74177 frame_id=729342026-05-26T20:46:01.803375ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames2026-05-26T20:46:02.267559ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72938 paired-1 still_pending=02026-05-26T20:46:02.271523ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3421085833146907168,trigger=typing_pause)2026-05-26T20:46:02.376213ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)2026-05-26T20:46:02.815754ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 8 frames, 1.8MB → 1.1MB (1.6x), 8 JPEGs deleted2026-05-26T20:46:03.657199ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-121 row_id=74180 frame_id=729372026-05-26T20:46:04.244805ZINFO2026-05-26T20:46:06.391706ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.6MB → 1.0MB (1.5x), 9 JPEGs deletedscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168,trigger=typing_pause)2026-05-26T20:46:07.184824ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-122 row_id=74184 frame_id=729382026-05-26T20:46:07.454911ZWARNscreenpipe_engine:: frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted-1 pending_events=0pending_frames=16total_pairs=120total_evicted=84 total_failed=02026-05-26T20:46:12.937588ZWARNscreenpipe_engine:: frame_ts=1pending_frames=15total_pairs=120linker_actor:frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_eventotal_evicted=86 total_failed=02026-05-26T20:46:12.937736ZINFO2026-05-26T20:46:16.984303ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72941 paired-1 still_pending=0screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72943 paired-1 still_pending=02026-05-26T20:46:17.069561ZINFO2026-05-26T20:46:19.027309ZWARNscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4251890987288014344, trigger=typing_pause)screenpipe_engine:: frame.ts=0pending_frames=15total_pairs=122linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_eventotal_evicted-88 total_failed=02026-05-26T20:46:19.028000ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (framearrived first) corr_id-125 row_id=74187 frame_id=729452026-05-26T20:46:20.588201ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (eventsarrived first) frame_id=72947 paired-1 still_pending=02026-05-26T20:46:29.033924ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:46:31.055278ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=5 pending_events=0pending_frames=11total_pairs=124total_evicted=93 total_failed=02026-05-26T20:46:31.055389ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: pairedframe+events (events arrived first) frame_id=72950 paired=1 still_pending=02026-05-26T20:46:31.237795ZINFOscreenpipe_engine: :event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:31.770518ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72954 paired=1 still_pending=02026-05-26T20:46:31.888656ZINFO2026-05-26T20:46:3212306507INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5575582890517815957, trigger=click)screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:46:32.558671ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72955
|
2621
|
7
|
2026-05-26T17:46:33.537126+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817593537_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Firefox[PASSWORD_DOTS]DXP4800PLUS-85F8Garmin Dashb Firefox[PASSWORD_DOTS]DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher+ New TatViewHistoryooountrnPotLe.ToolsWindowHelplauncher.keychron.com/#/unsupportedinbox - [EMAIL] - Gmail - mail.google.com/mai/u/0/finbor& KeychiLocation Logger - location-tracker.lakylak.xyz/dashboardtoYouluee — wouttoc.comX74S0Uxs-bordaswiichtota, Screenpipe - Archive - app.screenpipe.lakylak.xyzPhotos - Google Photos - photos.google.comeaude — cinudecustomize/connectorRecent Starche:keychron launcherchenМитиоС ФиСтонChromeOperaE Try Without An KeyboardO Try Without A MouseOAAOO0@ •Chat100% K$2- 8• Tue 26 May 20:46:33• 0000ta availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEU Worldwicbash +vMM .c x.8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Prinacx Polisoy and Ierms ol ServiceTERMSKNOWLEDGE BASE | BLOG...
|
NULL
|
3242348731130379748
|
NULL
|
click
|
ocr
|
NULL
|
Firefox[PASSWORD_DOTS]DXP4800PLUS-85F8Garmin Dashb Firefox[PASSWORD_DOTS]DXP4800PLUS-85F8Garmin Dashboard€ keychron Launcher+ New TatViewHistoryooountrnPotLe.ToolsWindowHelplauncher.keychron.com/#/unsupportedinbox - [EMAIL] - Gmail - mail.google.com/mai/u/0/finbor& KeychiLocation Logger - location-tracker.lakylak.xyz/dashboardtoYouluee — wouttoc.comX74S0Uxs-bordaswiichtota, Screenpipe - Archive - app.screenpipe.lakylak.xyzPhotos - Google Photos - photos.google.comeaude — cinudecustomize/connectorRecent Starche:keychron launcherchenМитиоС ФиСтонChromeOperaE Try Without An KeyboardO Try Without A MouseOAAOO0@ •Chat100% K$2- 8• Tue 26 May 20:46:33• 0000ta availabicSign InGSign in with GoogleSign in with Office 365Login via SSOEU Worldwicbash +vMM .c x.8.15S.US 1Don't have account yet? Speak to your sales leader to get an invite.By using this service you agree to the Prinacx Polisoy and Ierms ol ServiceTERMSKNOWLEDGE BASE | BLOG...
|
72953
|
NULL
|
NULL
|
NULL
|
|
72954
|
2620
|
4
|
2026-05-26T17:46:31.055375+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817591055_m1.jpg...
|
Firefox
|
keychron Launcher — Personal
|
1
|
launcher.keychron.com/#/unsupported
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron Launcher","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron Launcher","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Connect","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher - V1.3.4","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only The Following Browsers Are Supported","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chrome","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Edge","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opera","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without An Keyboard","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without A Mouse","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle theme","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5575582890517815957
|
2216606358642707532
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
72951
|
NULL
|
NULL
|
NULL
|
|
72953
|
2621
|
6
|
2026-05-26T17:46:25.855364+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817585855_m2.jpg...
|
Firefox
|
keychron Launcher — Personal
|
1
|
launcher.keychron.com/#/unsupported
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron Launcher","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron Launcher","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.03307846,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.09142287,"top":0.12968874,"width":0.0063164895,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Connect","depth":8,"bounds":{"left":0.099567816,"top":0.13288109,"width":0.013131649,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher - V1.3.4","depth":4,"bounds":{"left":0.08809841,"top":0.97126895,"width":0.027925532,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":4,"bounds":{"left":0.2556516,"top":0.28850758,"width":0.0071476065,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only The Following Browsers Are Supported","depth":3,"bounds":{"left":0.26462767,"top":0.2897047,"width":0.109707445,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chrome","depth":4,"bounds":{"left":0.2471742,"top":0.44972068,"width":0.013464096,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Edge","depth":4,"bounds":{"left":0.37167552,"top":0.44972068,"width":0.008643617,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opera","depth":4,"bounds":{"left":0.2486702,"top":0.5961692,"width":0.010472074,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.2534907,"top":0.745012,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without An Keyboard","depth":6,"bounds":{"left":0.2606383,"top":0.74581003,"width":0.04737367,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.32962102,"top":0.745012,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without A Mouse","depth":6,"bounds":{"left":0.33676863,"top":0.74581003,"width":0.039727394,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.4659242,"top":0.06863528,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle theme","depth":4,"bounds":{"left":0.47672874,"top":0.06464485,"width":0.008976064,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.47839096,"top":0.06863528,"width":0.005485372,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5575582890517815957
|
2216606358642707532
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72952
|
2621
|
5
|
2026-05-26T17:46:22.701390+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817582701_m2.jpg...
|
Firefox
|
keychron Launcher — Personal
|
1
|
launcher.keychron.com/#/unsupported
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher -
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron Launcher","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron Launcher","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.03307846,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.09142287,"top":0.12968874,"width":0.0063164895,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Connect","depth":8,"bounds":{"left":0.099567816,"top":0.13288109,"width":0.013131649,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher -","depth":4,"bounds":{"left":0.09375,"top":0.97126895,"width":0.01662234,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":4,"bounds":{"left":0.2556516,"top":0.28850758,"width":0.0071476065,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only The Following Browsers Are Supported","depth":3,"bounds":{"left":0.26462767,"top":0.2897047,"width":0.109707445,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chrome","depth":4,"bounds":{"left":0.2471742,"top":0.44972068,"width":0.013464096,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Edge","depth":4,"bounds":{"left":0.37167552,"top":0.44972068,"width":0.008643617,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opera","depth":4,"bounds":{"left":0.2486702,"top":0.5961692,"width":0.010472074,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.2534907,"top":0.745012,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without An Keyboard","depth":6,"bounds":{"left":0.2606383,"top":0.74581003,"width":0.04737367,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.32962102,"top":0.745012,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without A Mouse","depth":6,"bounds":{"left":0.33676863,"top":0.74581003,"width":0.039727394,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.4659242,"top":0.06863528,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle theme","depth":4,"bounds":{"left":0.47672874,"top":0.06464485,"width":0.008976064,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.47839096,"top":0.06863528,"width":0.005485372,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
698228308390938756
|
4522448818100620889
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher -
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
72950
|
NULL
|
NULL
|
NULL
|
|
72951
|
2620
|
3
|
2026-05-26T17:46:20.690285+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817580690_m1.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
launcher.keychron.com
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Waiting for www.google.com…...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Waiting for www.google.com…","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4731772905179080652
|
4146639443216876737
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Waiting for www.google.com…...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72950
|
2621
|
4
|
2026-05-26T17:46:20.588177+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817580588_m2.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
launcher.keychron.com
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Tools...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.061170213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"bounds":{"left":0.07795878,"top":0.101356745,"width":0.025598405,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"bounds":{"left":0.078125,"top":0.101356745,"width":0.025265958,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"bounds":{"left":0.1015625,"top":0.08060654,"width":0.030585106,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"bounds":{"left":0.15375665,"top":0.07342378,"width":0.17353724,"height":0.03990423},"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"bounds":{"left":0.15375665,"top":0.08539505,"width":0.04454787,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"bounds":{"left":0.32729387,"top":0.07342378,"width":0.015957447,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"bounds":{"left":0.34491357,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"bounds":{"left":0.35821143,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"bounds":{"left":0.3728391,"top":0.07342378,"width":0.01462766,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"bounds":{"left":0.46409574,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":2,"bounds":{"left":0.4800532,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"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":10,"bounds":{"left":0.09757314,"top":0.12210695,"width":0.025930852,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Mode","depth":12,"bounds":{"left":0.1015625,"top":0.13647246,"width":0.017952127,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All","depth":10,"bounds":{"left":0.12350399,"top":0.12210695,"width":0.013464096,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":13,"bounds":{"left":0.12749335,"top":0.13647246,"width":0.005485372,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Images","depth":10,"bounds":{"left":0.13696809,"top":0.12210695,"width":0.023769947,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Images","depth":12,"bounds":{"left":0.14095744,"top":0.13647246,"width":0.015791224,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Videos","depth":10,"bounds":{"left":0.16073804,"top":0.12210695,"width":0.022772606,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Videos","depth":12,"bounds":{"left":0.16472739,"top":0.13647246,"width":0.014793883,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Short videos","depth":10,"bounds":{"left":0.18351063,"top":0.12210695,"width":0.035738032,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Short videos","depth":12,"bounds":{"left":0.1875,"top":0.13647246,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"News","depth":10,"bounds":{"left":0.21924867,"top":0.12210695,"width":0.019780586,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"News","depth":12,"bounds":{"left":0.22323804,"top":0.13647246,"width":0.011801862,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums","depth":10,"bounds":{"left":0.23902926,"top":0.12210695,"width":0.024268618,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":12,"bounds":{"left":0.24301861,"top":0.13647246,"width":0.016289894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More filters","depth":10,"bounds":{"left":0.2632979,"top":0.12210695,"width":0.025099734,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":13,"bounds":{"left":0.26728722,"top":0.13647246,"width":0.011136968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Tools","depth":9,"bounds":{"left":0.2883976,"top":0.12210695,"width":0.02543218,"height":0.03830806},"on_screen":true,"subrole":"AXUnknown"}]...
|
4154500397205950190
|
1970839252457500680
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Tools...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72949
|
2621
|
3
|
2026-05-26T17:46:19.492016+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817579492_m2.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Search Results
Search Results...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.061170213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"bounds":{"left":0.07795878,"top":0.101356745,"width":0.025598405,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"bounds":{"left":0.078125,"top":0.101356745,"width":0.025265958,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"bounds":{"left":0.1015625,"top":0.08060654,"width":0.030585106,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"bounds":{"left":0.15375665,"top":0.07342378,"width":0.17353724,"height":0.03990423},"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"bounds":{"left":0.15375665,"top":0.08539505,"width":0.04454787,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"bounds":{"left":0.32729387,"top":0.07342378,"width":0.015957447,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"bounds":{"left":0.34491357,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"bounds":{"left":0.35821143,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"bounds":{"left":0.3728391,"top":0.07342378,"width":0.01462766,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"bounds":{"left":0.46409574,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":2,"bounds":{"left":0.4800532,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"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":5,"bounds":{"left":0.09757314,"top":0.12210695,"width":0.025930852,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Mode","depth":7,"bounds":{"left":0.1015625,"top":0.13647246,"width":0.017952127,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All","depth":5,"bounds":{"left":0.12350399,"top":0.12210695,"width":0.013464096,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":8,"bounds":{"left":0.12749335,"top":0.13647246,"width":0.005485372,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Images","depth":5,"bounds":{"left":0.13696809,"top":0.12210695,"width":0.023769947,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Images","depth":7,"bounds":{"left":0.14095744,"top":0.13647246,"width":0.015791224,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Videos","depth":5,"bounds":{"left":0.16073804,"top":0.12210695,"width":0.022772606,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Videos","depth":7,"bounds":{"left":0.16472739,"top":0.13647246,"width":0.014793883,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Short videos","depth":5,"bounds":{"left":0.18351063,"top":0.12210695,"width":0.035738032,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Short videos","depth":7,"bounds":{"left":0.1875,"top":0.13647246,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"News","depth":5,"bounds":{"left":0.21924867,"top":0.12210695,"width":0.019780586,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"News","depth":7,"bounds":{"left":0.22323804,"top":0.13647246,"width":0.011801862,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums","depth":5,"bounds":{"left":0.23902926,"top":0.12210695,"width":0.024268618,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":7,"bounds":{"left":0.24301861,"top":0.13647246,"width":0.016289894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More filters","depth":5,"bounds":{"left":0.2632979,"top":0.12210695,"width":0.025099734,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":8,"bounds":{"left":0.26728722,"top":0.13647246,"width":0.011136968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Search Results","depth":2,"bounds":{"left":0.06881649,"top":0.16041501,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search Results","depth":3,"bounds":{"left":0.06881649,"top":0.16041501,"width":0.03158245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
813334405648585864
|
1979881637174883592
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Search Results
Search Results...
|
72947
|
NULL
|
NULL
|
NULL
|
|
72948
|
2620
|
2
|
2026-05-26T17:46:19.131402+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817579131_m1.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Waiting for lh3.google.com…...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"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":1,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"on_screen":true,"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":2,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Waiting for lh3.google.com…","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-2851755702070332738
|
4133728296412927114
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Waiting for lh3.google.com…...
|
72946
|
NULL
|
NULL
|
NULL
|
|
72947
|
2621
|
2
|
2026-05-26T17:46:19.027411+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817579027_m2.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Transferring data from www.google.com…...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.061170213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"bounds":{"left":0.07795878,"top":0.101356745,"width":0.025598405,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"bounds":{"left":0.078125,"top":0.101356745,"width":0.025265958,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"bounds":{"left":0.1015625,"top":0.08060654,"width":0.030585106,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"bounds":{"left":0.15375665,"top":0.07342378,"width":0.17353724,"height":0.03990423},"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"bounds":{"left":0.15375665,"top":0.08619314,"width":0.043550532,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"bounds":{"left":0.32729387,"top":0.07342378,"width":0.015957447,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"bounds":{"left":0.34491357,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"bounds":{"left":0.35821143,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"bounds":{"left":0.3728391,"top":0.07342378,"width":0.01462766,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"bounds":{"left":0.46409574,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":2,"bounds":{"left":0.4800532,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Transferring data from www.google.com…","depth":5,"bounds":{"left":0.07014628,"top":0.9876297,"width":0.07280585,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4623954934758034773
|
1827885286124712970
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Transferring data from www.google.com…...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72946
|
2620
|
1
|
2026-05-26T17:46:17.129172+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817577129_m1.jpg...
|
Firefox
|
Personal — Mozilla Firefox
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mozilla Firefox","depth":3,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Search with Google or enter address","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search with Google or enter address","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Location Logger","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Location Logger","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"(195) YouTube","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(195) YouTube","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for (195) YouTube","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"DXP4800PLUS-B5F8","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for DXP4800PLUS-B5F8","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe — Archive","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Screenpipe — Archive","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Photos - Google Photos","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Photos - Google Photos","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Claude","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"authentik","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"authentik","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for authentik","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":4,"bounds":{"left":0.4420139,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":7,"bounds":{"left":0.44826388,"top":0.0,"width":0.05277778,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4251890987288014344
|
-4782654314694416809
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72945
|
2621
|
1
|
2026-05-26T17:46:16.125588+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817576125_m2.jpg...
|
Firefox
|
Personal — Mozilla Firefox
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.074221864,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.08539505,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.10694334,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.11811652,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.1396648,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.15083799,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.14684756,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.17398244,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mozilla Firefox","depth":3,"bounds":{"left":0.14295213,"top":0.20989625,"width":0.28291222,"height":0.075019956},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Search with Google or enter address","depth":3,"bounds":{"left":0.14295213,"top":0.29409418,"width":0.28291222,"height":0.0415004},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search with Google or enter address","depth":5,"bounds":{"left":0.15940824,"top":0.30726257,"width":0.08344415,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"bounds":{"left":0.17154256,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":8,"bounds":{"left":0.17170878,"top":0.43415803,"width":0.024601065,"height":0.051077414},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"bounds":{"left":0.18783244,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Location Logger","depth":6,"bounds":{"left":0.2002992,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":8,"bounds":{"left":0.20412233,"top":0.43415803,"width":0.017121011,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Location Logger","depth":6,"bounds":{"left":0.2165891,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"(195) YouTube","depth":6,"bounds":{"left":0.22888963,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(195) YouTube","depth":8,"bounds":{"left":0.23287898,"top":0.43415803,"width":0.017121011,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for (195) YouTube","depth":6,"bounds":{"left":0.24517952,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.25764626,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":8,"bounds":{"left":0.2578125,"top":0.43415803,"width":0.02443484,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.27393618,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe — Archive","depth":6,"bounds":{"left":0.2862367,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":8,"bounds":{"left":0.28740028,"top":0.43415803,"width":0.022772606,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Screenpipe — Archive","depth":6,"bounds":{"left":0.3025266,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Photos - Google Photos","depth":6,"bounds":{"left":0.31499335,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":8,"bounds":{"left":0.31881648,"top":0.43415803,"width":0.017287234,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Photos - Google Photos","depth":6,"bounds":{"left":0.33128324,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude","depth":6,"bounds":{"left":0.34358376,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":8,"bounds":{"left":0.34906915,"top":0.43415803,"width":0.013962766,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Claude","depth":6,"bounds":{"left":0.35987368,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"authentik","depth":6,"bounds":{"left":0.3723404,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"authentik","depth":8,"bounds":{"left":0.37533244,"top":0.43415803,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for authentik","depth":6,"bounds":{"left":0.38863033,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":4,"bounds":{"left":0.48188165,"top":0.9565044,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":7,"bounds":{"left":0.48487368,"top":0.96209097,"width":0.025265958,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4251890987288014344
|
-4782654314694416809
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
72943
|
NULL
|
NULL
|
NULL
|
|
72944
|
2620
|
0
|
2026-05-26T17:46:13.082737+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817573082_m1.jpg...
|
Firefox
|
Personal — Mozilla Firefox
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mozilla Firefox","depth":3,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Search with Google or enter address","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search with Google or enter address","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Location Logger","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Location Logger","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"(195) YouTube","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(195) YouTube","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for (195) YouTube","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"DXP4800PLUS-B5F8","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for DXP4800PLUS-B5F8","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe — Archive","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Screenpipe — Archive","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Photos - Google Photos","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Photos - Google Photos","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Claude","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"authentik","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"authentik","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for authentik","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":4,"bounds":{"left":0.4420139,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":7,"bounds":{"left":0.44826388,"top":0.0,"width":0.05277778,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8761272817118293531
|
-4800668713220676009
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
72942
|
NULL
|
NULL
|
NULL
|
|
72943
|
2621
|
0
|
2026-05-26T17:46:12.978940+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817572978_m2.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.118914604,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.2571476,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.06482713,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"bounds":{"left":0.33926198,"top":0.070231445,"width":0.010139627,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.35804522,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.3643617,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"bounds":{"left":0.36818483,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.37450132,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.37832448,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.39045876,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"bounds":{"left":0.40458778,"top":0.070231445,"width":0.004654255,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.41788563,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.4242021,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"bounds":{"left":0.42802528,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.43434176,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.4381649,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.4502992,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"bounds":{"left":0.4644282,"top":0.06464485,"width":0.027593086,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"bounds":{"left":0.08344415,"top":0.13447726,"width":0.023105053,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"bounds":{"left":0.08344415,"top":0.15043895,"width":0.03158245,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"bounds":{"left":0.15359043,"top":0.13447726,"width":0.025265958,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"bounds":{"left":0.15359043,"top":0.15043895,"width":0.03125,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"bounds":{"left":0.2237367,"top":0.13447726,"width":0.0234375,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"bounds":{"left":0.2237367,"top":0.15043895,"width":0.025764627,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"bounds":{"left":0.29371676,"top":0.13447726,"width":0.035405584,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"bounds":{"left":0.29371676,"top":0.15043895,"width":0.02543218,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"bounds":{"left":0.36386302,"top":0.13447726,"width":0.035738032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"bounds":{"left":0.36386302,"top":0.15043895,"width":0.03274601,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"bounds":{"left":0.4340093,"top":0.13447726,"width":0.021775266,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"bounds":{"left":0.4340093,"top":0.15043895,"width":0.03307846,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"bounds":{"left":0.08344415,"top":0.22146848,"width":0.040226065,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"bounds":{"left":0.082446806,"top":0.4632881,"width":0.010638298,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"bounds":{"left":0.15890957,"top":0.4632881,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"bounds":{"left":0.22706117,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"bounds":{"left":0.33111703,"top":0.48563448,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"bounds":{"left":0.43600398,"top":0.48563448,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"bounds":{"left":0.082446806,"top":0.5123703,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.5123703,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"bounds":{"left":0.22706117,"top":0.5123703,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
6166161052072897850
|
4440768377413178949
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72942
|
NULL
|
0
|
2026-05-26T17:46:07.858577+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817567858_m1.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
http://192.168.0.242:8007/ui
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.078125,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.07986111,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.08055556,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.081597224,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.0,"top":0.0055555557,"width":0.07951389,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.12708333,"top":0.0055555557,"width":0.08055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.006666667,"width":0.014930556,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.078125,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.08055556,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.0,"top":0.0055555557,"width":0.07951389,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.07986111,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.081597224,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.12708333,"top":0.0055555557,"width":0.08055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.006666667,"width":0.014930556,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"👟 Daily Steps","depth":2,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"bounds":{"left":0.0,"top":0.41555557,"width":0.027777778,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"bounds":{"left":0.10069445,"top":0.41555557,"width":0.072916664,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.0,"top":0.45277777,"width":0.00625,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.4538889,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"bounds":{"left":0.0,"top":0.49222222,"width":0.017013889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.49333334,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"bounds":{"left":0.0,"top":0.5322222,"width":0.02638889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.53333336,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"bounds":{"left":0.0,"top":0.57222223,"width":0.026041666,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.5733333,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"bounds":{"left":0.0,"top":0.6116667,"width":0.025,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.61277777,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"bounds":{"left":0.0,"top":0.65166664,"width":0.02673611,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.6527778,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"bounds":{"left":0.0,"top":0.6911111,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.69222224,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"bounds":{"left":0.0,"top":0.7311111,"width":0.016319444,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7322222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"bounds":{"left":0.0,"top":0.77111113,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7722222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"bounds":{"left":0.0,"top":0.8105556,"width":0.024652777,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.81166667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"bounds":{"left":0.0,"top":0.85055554,"width":0.025347222,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.8516667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"bounds":{"left":0.0,"top":0.89,"width":0.017361112,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.89111114,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"bounds":{"left":0.0,"top":0.93,"width":0.018055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9311111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"bounds":{"left":0.0,"top":0.97,"width":0.015277778,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9711111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5430402324763363673
|
-5188034650051299992
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72941
|
NULL
|
0
|
2026-05-26T17:46:07.805450+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817567805_m2.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
http://192.168.0.242:8007/ui
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.118914604,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.2571476,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.06482713,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"bounds":{"left":0.33926198,"top":0.070231445,"width":0.010139627,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.35804522,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.3643617,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"bounds":{"left":0.36818483,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.37450132,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.37832448,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.39045876,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"bounds":{"left":0.40458778,"top":0.070231445,"width":0.004654255,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.41788563,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.4242021,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"bounds":{"left":0.42802528,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.43434176,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.4381649,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.4502992,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"bounds":{"left":0.4644282,"top":0.06464485,"width":0.027593086,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"bounds":{"left":0.08344415,"top":0.13447726,"width":0.023105053,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"bounds":{"left":0.08344415,"top":0.15043895,"width":0.03158245,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"bounds":{"left":0.15359043,"top":0.13447726,"width":0.025265958,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"bounds":{"left":0.15359043,"top":0.15043895,"width":0.03125,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"bounds":{"left":0.2237367,"top":0.13447726,"width":0.0234375,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"bounds":{"left":0.2237367,"top":0.15043895,"width":0.025764627,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"bounds":{"left":0.29371676,"top":0.13447726,"width":0.035405584,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"bounds":{"left":0.29371676,"top":0.15043895,"width":0.02543218,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"bounds":{"left":0.36386302,"top":0.13447726,"width":0.035738032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"bounds":{"left":0.36386302,"top":0.15043895,"width":0.03274601,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"bounds":{"left":0.4340093,"top":0.13447726,"width":0.021775266,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"bounds":{"left":0.4340093,"top":0.15043895,"width":0.03307846,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"bounds":{"left":0.08344415,"top":0.22146848,"width":0.040226065,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"bounds":{"left":0.082446806,"top":0.4632881,"width":0.010638298,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"bounds":{"left":0.15890957,"top":0.4632881,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"bounds":{"left":0.22706117,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"bounds":{"left":0.33111703,"top":0.4632881,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"bounds":{"left":0.43600398,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"bounds":{"left":0.082446806,"top":0.49002394,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.49002394,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"bounds":{"left":0.22706117,"top":0.49002394,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"bounds":{"left":0.33111703,"top":0.49002394,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.49082202,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"bounds":{"left":0.082446806,"top":0.51835597,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.51835597,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"bounds":{"left":0.22706117,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"bounds":{"left":0.33111703,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.519154,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"bounds":{"left":0.082446806,"top":0.547087,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"bounds":{"left":0.15890957,"top":0.547087,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"bounds":{"left":0.22706117,"top":0.547087,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"bounds":{"left":0.33111703,"top":0.547087,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.54788506,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"bounds":{"left":0.082446806,"top":0.575419,"width":0.025265958,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"bounds":{"left":0.15890957,"top":0.575419,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"bounds":{"left":0.22706117,"top":0.575419,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"bounds":{"left":0.33111703,"top":0.575419,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.57621706,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"bounds":{"left":0.082446806,"top":0.60415006,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"bounds":{"left":0.15890957,"top":0.60415006,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.60415006,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"bounds":{"left":0.33111703,"top":0.60415006,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6049481,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"bounds":{"left":0.082446806,"top":0.6328811,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"bounds":{"left":0.15890957,"top":0.6328811,"width":0.013796543,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"bounds":{"left":0.22706117,"top":0.6328811,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"bounds":{"left":0.33111703,"top":0.6328811,"width":0.038896278,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.63367915,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"bounds":{"left":0.082446806,"top":0.6612131,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"bounds":{"left":0.15890957,"top":0.6612131,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.6612131,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"bounds":{"left":0.33111703,"top":0.6612131,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.66201115,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"bounds":{"left":0.082446806,"top":0.68994415,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"bounds":{"left":0.15890957,"top":0.68994415,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"bounds":{"left":0.22706117,"top":0.68994415,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"bounds":{"left":0.33111703,"top":0.68994415,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6907422,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"bounds":{"left":0.082446806,"top":0.71827614,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"bounds":{"left":0.15890957,"top":0.71827614,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"bounds":{"left":0.22706117,"top":0.71827614,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"bounds":{"left":0.33111703,"top":0.71827614,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.71907425,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"bounds":{"left":0.082446806,"top":0.7470072,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.7470072,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"bounds":{"left":0.22706117,"top":0.7470072,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"bounds":{"left":0.33111703,"top":0.7470072,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.74780524,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"bounds":{"left":0.082446806,"top":0.77573824,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"bounds":{"left":0.15890957,"top":0.77573824,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"bounds":{"left":0.22706117,"top":0.77573824,"width":0.03656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"bounds":{"left":0.33111703,"top":0.77573824,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.7765363,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"bounds":{"left":0.082446806,"top":0.80407023,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.80407023,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"bounds":{"left":0.22706117,"top":0.80407023,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"bounds":{"left":0.33111703,"top":0.80407023,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.80486834,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"bounds":{"left":0.082446806,"top":0.8328013,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.8328013,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"bounds":{"left":0.22706117,"top":0.8328013,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"bounds":{"left":0.33111703,"top":0.8328013,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.8335994,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"bounds":{"left":0.082446806,"top":0.8611333,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.8611333,"width":0.013131649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"bounds":{"left":0.22706117,"top":0.8611333,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"bounds":{"left":0.33111703,"top":0.8611333,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.8619314,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"bounds":{"left":0.082446806,"top":0.8898643,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.8898643,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"bounds":{"left":0.22706117,"top":0.8898643,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"bounds":{"left":0.33111703,"top":0.8898643,"width":0.03756649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.89066243,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"bounds":{"left":0.082446806,"top":0.9185954,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.9185954,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"bounds":{"left":0.22706117,"top":0.9185954,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"bounds":{"left":0.33111703,"top":0.9185954,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.9193935,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"bounds":{"left":0.082446806,"top":0.94692737,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.94692737,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.22706117,"top":0.94692737,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.33111703,"top":0.94692737,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9477255,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"bounds":{"left":0.082446806,"top":0.9756584,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.9756584,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.22706117,"top":0.9756584,"width":0.03856383,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.33111703,"top":0.9756584,"width":0.0390625,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9764565,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"bounds":{"left":0.082446806,"top":1.0,"width":0.025265958,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"bounds":{"left":0.15890957,"top":1.0,"width":0.015957447,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.22706117,"top":1.0,"width":0.038065158,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.33111703,"top":1.0,"width":0.03856383,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":1.0,"width":0.0071476065,"height":-0.004788518},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"bounds":{"left":0.082446806,"top":0.4632881,"width":0.010638298,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"bounds":{"left":0.082446806,"top":0.49002394,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"bounds":{"left":0.082446806,"top":0.51835597,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"bounds":{"left":0.082446806,"top":0.547087,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"bounds":{"left":0.082446806,"top":0.575419,"width":0.025265958,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"bounds":{"left":0.082446806,"top":0.60415006,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"bounds":{"left":0.082446806,"top":0.6328811,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"bounds":{"left":0.082446806,"top":0.6612131,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"bounds":{"left":0.082446806,"top":0.68994415,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"bounds":{"left":0.082446806,"top":0.71827614,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"bounds":{"left":0.082446806,"top":0.7470072,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"bounds":{"left":0.082446806,"top":0.77573824,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"bounds":{"left":0.082446806,"top":0.80407023,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"bounds":{"left":0.082446806,"top":0.8328013,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"bounds":{"left":0.082446806,"top":0.8611333,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"bounds":{"left":0.082446806,"top":0.8898643,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"bounds":{"left":0.082446806,"top":0.9185954,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"bounds":{"left":0.082446806,"top":0.94692737,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"bounds":{"left":0.082446806,"top":0.9756584,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"bounds":{"left":0.082446806,"top":1.0,"width":0.025265958,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"bounds":{"left":0.15890957,"top":0.4632881,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.49002394,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.51835597,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"bounds":{"left":0.15890957,"top":0.547087,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"bounds":{"left":0.15890957,"top":0.575419,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"bounds":{"left":0.15890957,"top":0.60415006,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"bounds":{"left":0.15890957,"top":0.6328811,"width":0.013796543,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"bounds":{"left":0.15890957,"top":0.6612131,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"bounds":{"left":0.15890957,"top":0.68994415,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"bounds":{"left":0.15890957,"top":0.71827614,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.7470072,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"bounds":{"left":0.15890957,"top":0.77573824,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.80407023,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.8328013,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.8611333,"width":0.013131649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.8898643,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.9185954,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.94692737,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.9756584,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"bounds":{"left":0.15890957,"top":1.0,"width":0.015957447,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"bounds":{"left":0.22706117,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"bounds":{"left":0.22706117,"top":0.49002394,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"bounds":{"left":0.22706117,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"bounds":{"left":0.22706117,"top":0.547087,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"bounds":{"left":0.22706117,"top":0.575419,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.60415006,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"bounds":{"left":0.22706117,"top":0.6328811,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.6612131,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"bounds":{"left":0.22706117,"top":0.68994415,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"bounds":{"left":0.22706117,"top":0.71827614,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"bounds":{"left":0.22706117,"top":0.7470072,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"bounds":{"left":0.22706117,"top":0.77573824,"width":0.03656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"bounds":{"left":0.22706117,"top":0.80407023,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"bounds":{"left":0.22706117,"top":0.8328013,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"bounds":{"left":0.22706117,"top":0.8611333,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"bounds":{"left":0.22706117,"top":0.8898643,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"bounds":{"left":0.22706117,"top":0.9185954,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.22706117,"top":0.94692737,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.22706117,"top":0.9756584,"width":0.03856383,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.22706117,"top":1.0,"width":0.038065158,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"bounds":{"left":0.33111703,"top":0.4632881,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"bounds":{"left":0.33111703,"top":0.49002394,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"bounds":{"left":0.33111703,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"bounds":{"left":0.33111703,"top":0.547087,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"bounds":{"left":0.33111703,"top":0.575419,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"bounds":{"left":0.33111703,"top":0.60415006,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"bounds":{"left":0.33111703,"top":0.6328811,"width":0.038896278,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"bounds":{"left":0.33111703,"top":0.6612131,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"bounds":{"left":0.33111703,"top":0.68994415,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"bounds":{"left":0.33111703,"top":0.71827614,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"bounds":{"left":0.33111703,"top":0.7470072,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"bounds":{"left":0.33111703,"top":0.77573824,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"bounds":{"left":0.33111703,"top":0.80407023,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"bounds":{"left":0.33111703,"top":0.8328013,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"bounds":{"left":0.33111703,"top":0.8611333,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"bounds":{"left":0.33111703,"top":0.8898643,"width":0.03756649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"bounds":{"left":0.33111703,"top":0.9185954,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.33111703,"top":0.94692737,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.33111703,"top":0.9756584,"width":0.0390625,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.33111703,"top":1.0,"width":0.03856383,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"bounds":{"left":0.43600398,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.49082202,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.519154,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.54788506,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.57621706,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6049481,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.63367915,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.66201115,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6907422,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.71907425,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.74780524,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.7765363,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.80486834,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.8335994,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.8619314,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.89066243,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.9193935,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9477255,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9764565,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":1.0,"width":0.0071476065,"height":-0.004788518},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"👟 Daily Steps","depth":2,"bounds":{"left":0.08344415,"top":1.0,"width":0.032247342,"height":-0.05666399},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8916160876049566262
|
-5183390295722281624
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low...
|
72938
|
NULL
|
NULL
|
NULL
|
|
72940
|
2618
|
72
|
2026-05-26T17:46:06.781724+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817566781_m1.jpg...
|
Alfred
|
Alfred
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
di
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"di","depth":1,"bounds":{"left":0.26180556,"top":0.16777778,"width":0.4763889,"height":0.05888889},"on_screen":true,"value":"di","help_text":"Alfred Search","role_description":"text field","is_enabled":true,"is_focused":true}]...
|
3421085833146907168
|
3421085833146907168
|
typing_pause
|
hybrid
|
NULL
|
di
FirefoxFileEditViewHistoryBookmarksProfilesTool di
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp• 0100% C73• Tue 26 May 20:46:06screenpipe"DOCKER₴81DEV (docker)O 82APP (-zsh)• 832026-05-26120:45:11.831826ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: pairedframe→events(events arrived first) fram"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.2026-05-26T20:45:13.552650ZWARNscreenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame orents=0pending_frames=16total_pairs=103total_evicted=70 total_failed=02026-05-26720:45:13.5529272INFO screenpipe_enaineПunlArAPeAn"SnAmAnAIИAA)SnamA AuAndeRnuandeanniund finct)2026-05-26T20:45:16.532307ZINFOscreenpipe2026-05-26T20:45:21.331007ZWARNscreenpipe.dilEname_id=72910 paired-1 still_pending=0e_id=72912 paired-1 still_pending=0event never arrived) evicted=4 pending_events=0pending_frames=14total_pairs=105total.2026-05-26T20:45:21.331143ZINFOscreenpipe.2026-05-26T20:45:22.455952ZWARNscreenpipe.ts=0pending_frames=14total_pairs=106totalDia.app/Applications/Dia.appe_id=72914 paired-1 still_pending=0event never arrived) evicted-1 pending_even2026-05-26120:45:26.1303152INFOscreenpipe.2026-05-26T20:45:27.455066ZWARNscreenpipe.ts=0pending_frames=12total.-pairs=107total2026-05-26120:45:29.7373302INFOscreenpipe.2026-05-26T20:45:30.043059ZINFOscreenpipe.Disk Utility.app/Applications/Utilities/Disk Utility.appWireless Diagnostics.app/System/Library/CoreServices/Applications/Wireless Diagnostics.app282e_id=72920 paired=1 still_pending=0event never arrived) evicted=3pending_even2832026-05-26T20:45:30.084288ZINFOscreenpipe.2026-05-26T20:45:30.732325ZINFOscreenpipe.Audio MIDI Setup.app/Applications/Utilities/Audio MIDI Setup.app₴842026-05-26T20:45:30.940107ZINFOscreenpipe.2026-05-26T20:45:33.577521ZWARNscreenpipe.Aae_id=72923 paired=1 still_pending=0d-111 row_id=74168 frame_id=729252817118293531, trigger=typing_pause)2817118293531, trigger=typing_pause)2817118293531, trigger=typing_pause)event never arrived) evicted=3 pending_events=0pending_frames=13total_pairs=109total.2026-05-26120:45:33.5777652INFO screenpipe.2026-05-26T20:45:33.578917ZINFOscreenpipe.2026-05-26T20:45:33.635766ZINFOscreenpipe.2026-05-26120:45:33.7207802INFOscreenpipe.2026-05-26T20:45:34.134973ZINFOscreenpipe.Dictionary.app/Applications/Dictionary.appDirectory Utility.app/System/Library/CoreServices/Applications/Directory Utility.appDigital Colour Meter.app/Applications/Utilities/Digital Color Meter.app₴5₴6$872026-05-26120:45:34.1875902INFOscreenpipe.2026-05-26T20:45:34.801124ZINFOscreenpipe.2026-05-26T20:45:36.205773ZINFOscreenpipeDisplaysSystem Settings → Displays4882026-05-26T20:45:37.783786ZWARNscreenpipe.d-112 row_id=74169 frame_id=72925d-113row_id=74170 frame_id=729262817118293531, trigger=typing_pause)2817118293531, trigger=typing_pause)d-114 row_id=74171 frame_id=729252817118293531, trigger=typing_pause)2817118293531,trigger=typing_pause)d-115 row_id=74172 frame_id=72925event never arrived) evicted=2 pending_events=1pending_frames=13total_pazrs=113total.Startup DiskSystem Settings → Startup Disk2026-05-26120:45:37.7840092INFOscreenpipe_e_id=72927 paired=1 still_pending=02026-05-26T20:45:39.806028ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72929 paired-1still_pending=02026-05-26T20:45:47.855586ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26720:45:52.5858832INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72933 paired=1 still_pending=02026-05-26T20:45:52.625874ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:45:56.264229ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-119 row_id=74177 frame_id=729342026-05-26T20:46:01.803375ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 17 eligible frames2026-05-26T20:46:02.267559ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72938 paired-1 still_pending=02026-05-26T20:46:02.271523ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3421085833146907168, trigger=typing_pause)2026-05-26T20:46:02.376213ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)2026-05-26120:46:02.815754ZINFO2026-05-26T20:46:03.657199ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 8 frames, 1.8MB → 1.1MB (1.6x), 8 JPEGs deletedscreenpipe_engine::frame_linker_actor: frame_linker: pairedevent»frame (frame arrived first) corr_id-121 row_id=74180 frame_id=729372026-05-26T20:46:04.244805ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.6MB → 1.OMB (1.5x), 9 JPEGs deleted2026-05-26120:46:06.3917062INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3421085833146907168, trigger=typing_pause)...
|
72939
|
NULL
|
NULL
|
NULL
|
|
72939
|
2618
|
71
|
2026-05-26T17:46:04.550761+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817564550_m1.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
http://192.168.0.242:8007/ui
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.078125,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.07986111,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.08055556,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.081597224,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.0,"top":0.0055555557,"width":0.07951389,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.12708333,"top":0.0055555557,"width":0.08055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.006666667,"width":0.014930556,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.078125,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.08055556,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.0,"top":0.0055555557,"width":0.07951389,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.07986111,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.081597224,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.12708333,"top":0.0055555557,"width":0.08055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.006666667,"width":0.014930556,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"👟 Daily Steps","depth":2,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"bounds":{"left":0.0,"top":0.41555557,"width":0.027777778,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"bounds":{"left":0.10069445,"top":0.41555557,"width":0.072916664,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.0,"top":0.45277777,"width":0.00625,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.4538889,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"bounds":{"left":0.0,"top":0.49222222,"width":0.017013889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.49333334,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"bounds":{"left":0.0,"top":0.5322222,"width":0.02638889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.53333336,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"bounds":{"left":0.0,"top":0.57222223,"width":0.026041666,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.5733333,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"bounds":{"left":0.0,"top":0.6116667,"width":0.025,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.61277777,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"bounds":{"left":0.0,"top":0.65166664,"width":0.02673611,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.6527778,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"bounds":{"left":0.0,"top":0.6911111,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.69222224,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"bounds":{"left":0.0,"top":0.7311111,"width":0.016319444,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7322222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"bounds":{"left":0.0,"top":0.77111113,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7722222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"bounds":{"left":0.0,"top":0.8105556,"width":0.024652777,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.81166667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"bounds":{"left":0.0,"top":0.85055554,"width":0.025347222,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.8516667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"bounds":{"left":0.0,"top":0.89,"width":0.017361112,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.89111114,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"bounds":{"left":0.0,"top":0.93,"width":0.018055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9311111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"bounds":{"left":0.0,"top":0.97,"width":0.015277778,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9711111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,316","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.025347222,"height":-0.009444475},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.015972223,"height":-0.010555506},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.009375,"height":-0.049444437},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.015972223,"height":-0.050555587},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.02638889,"height":-0.08888888},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.022222223,"height":-0.09000003},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,370","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"201","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,739","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"bounds":{"left":0.0,"top":0.41555557,"width":0.027777778,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.0,"top":0.45277777,"width":0.00625,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"bounds":{"left":0.0,"top":0.49222222,"width":0.017013889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"bounds":{"left":0.0,"top":0.5322222,"width":0.02638889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"bounds":{"left":0.0,"top":0.57222223,"width":0.026041666,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"bounds":{"left":0.0,"top":0.6116667,"width":0.025,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"bounds":{"left":0.0,"top":0.65166664,"width":0.02673611,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"bounds":{"left":0.0,"top":0.6911111,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"bounds":{"left":0.0,"top":0.7311111,"width":0.016319444,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"bounds":{"left":0.0,"top":0.77111113,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"bounds":{"left":0.0,"top":0.8105556,"width":0.024652777,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"bounds":{"left":0.0,"top":0.85055554,"width":0.025347222,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"bounds":{"left":0.0,"top":0.89,"width":0.017361112,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"bounds":{"left":0.0,"top":0.93,"width":0.018055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
2894611202872416538
|
-5188015958319024800
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72938
|
2619
|
77
|
2026-05-26T17:45:58.539990+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817558539_m2.jpg...
|
Alfred
|
Alfred
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
di
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"di","depth":1,"on_screen":true,"value":"di","help_text":"Alfred Search","role_description":"text field","is_enabled":true,"is_focused":true}]...
|
3421085833146907168
|
3421085833146907168
|
typing_pause
|
hybrid
|
NULL
|
di
DXP4800PLUS-85F8Garmin DashboardNot SecureNttp: di
DXP4800PLUS-85F8Garmin DashboardNot SecureNttp:192.108.0242:8007k1• Garmin DachboardAvo SuEth6h 14mBEST SLECH8h 21m6 Sleep DurationAvo SiErs2,0982026.06.26none nenn2026-05-282026-05-222026-05212026-05-202026-05-192026-05-182026-05-172026-05.6moaener2026-05-142026-05-132026-05-12MOAS ARA02026-05-092026-05-09AHOATION5h 21m8h 21m51115m5hTkm6h 12mRhyamCHASm6h 17m7h50m5h1mh 30mlCHAem5h 44m6h1mRhxzm7H A6mSh/Wim6h 33maRATIME2026-05-24 21:242006.06.22 20:202026-05-22 21:47Mooaosaatte2026-05 20 2082006.06.10 22:192026-05-18 20:282026-05-17 19:592026-05-16 20:152026-051521:592026-05-14 21:212026-05-13 20:452026-05-12 20:532026-05-11 20:3620N6ARN0 40-12026-05-08 21:312026-05-07 20:56BEST STEPS DAY5,92520/04/ 2020 0ANG PESTING HO66 bpm26/ 05 /2026MHK KANG:43-126Refrestsieep noursWANC2028-06-25 02:112026-05-24 05:292026-05-28 03:292026-05-22 03132026-05-21 03-062026-05-20 04:002026-05-19 03:362026-05-18 03:292026-05-17 04:502028.05-16.08:04DANRARAROIne2026-05-14 03:432026-05-13 03:382026-05-12 08:372008-06-11.09:46DANR ASANAR2ONA.AR.00 0/:312026-05-08 03:46QUALITYGoodShortShortFalrFairFairGoodFairFair• IUC ZOMJY 2U:40.000800 0*00*Review oroiect and olanReview project and plan improvementsame titor urWdashbpard.want to knwo allthe details. Glve detailed overvew of end ponts avallable. What can llruneliwank to see also detas but lets start trss with the dats avallableOSKC:2020-05-20• Bash Sample heartrate datacurl -s "http://localhost:8007/data/heartrate?fron_date:2826-05-285t0_date«2826-85-25* | python3 - json.tool 2-61OuKC:2020-05-20• Bash Check data completeness and HR reading densityPGPASSMORD=secretpassword psql -h localhost -p 5436 -U garmin -d garmin_db -cSElEC dnter CoiNtlel ae dhys with chta FRoMdaredays wiith dat.2026-85-26• Bash List all available Garmin methodscuel e "htto: /Mlocnlhost:8687 /oarefnceathode» louthon? de "iecort cooksute dafsos, lond(svc.stdinl: forint(e) tor e in diicathode*t1" 15C*Puradino.Queue another messaoeiextention-cuteut-ens-yscodt-teme< Edit automaticalymQbash +vMM.lc›8.25...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72937
|
2618
|
70
|
2026-05-26T17:45:58.320221+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817558320_m1.jpg...
|
Alfred
|
Alfred
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
di
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"di","depth":1,"bounds":{"left":0.26180556,"top":0.16777778,"width":0.4763889,"height":0.05888889},"on_screen":true,"value":"di","help_text":"Alfred Search","role_description":"text field","is_enabled":true,"is_focused":true}]...
|
3421085833146907168
|
3421085833146907168
|
visual_change
|
hybrid
|
NULL
|
di
FirefoxFileEditViewHistoryBookmarksProfilesTool di
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp100% <78• Tue 26 May 20:45:57screenpipe"O ₴2DOCKERwhisper_init_state:compute bufferwhisper_init_state:compute buffer• ₴1(cross)(decode)DEV (docker)APP (-zsh)• 838.50 MB96.83 MB"Docker Desktop" NotificationsNotifications may include alerts, soundsand icon badges.ggml_metal_free:deallocating2026-05-26120:45:00.0150972INFOscreenpipe_cu2026-05-26T20:45:04.114716ZINFOscreenpipe2026-05-26120:45:04.1176392WARNscreenpipee_id=72902paired-1 still_pending=0event neverarrived) evicted=13 pending_events=0pending_frames=15total,_pairs=101tota.2026-05-26T20:45:10.133769ZINFOscreenpipe_engine..raшe.-LLHINCI-UCLUIтгаше,сопкет.purrea trameseverres (evenes arrtvea Tirst Trame_id=72906 paired-1 still_pending=02026-05-26T20:45:11.831826ZINFOscreenpipe_engine::frame_linker_actor:frame_linker: paired frame»events (events arrived first) frame_id=72908 paired-1 still_pending=02026-05-26T20:45:13.552650ZWARN screenpipe_engine: : frame._linker_actor:frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_events=0pending_frames=16total_pairs=103total_evicted=70 total_failed=02026-05-26T20:45:13.552927ZINFOscreenpipe_engine::frame_linker_actor:2026-05-26T20:45:16.5323072INFOscreenpipe_engine:: frame.linker_actor:2026-05-26120:45:21.3310072WARNscreenpipe_engine:: frame.Linker_actor:frame_linker: paired frame→events (eventsarrived first) frame_id=72910 paired-1 still_pending=0frame_linker: paired frame→events (eventsarrived first) frame_id=72912 paired-1still_pending=0frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0pending_frames=14total_pairs=1052026-05-26T20:45:21.331143Ztotal_evicted=74total_failed=0INFOscreenpipe_engine:: frame_linker_actor:2026-05-26T20:45:22.455952ZWARNIscreenpipe_engine:: frame.ts=0pending_frames=14total_pairs=106linker_actor:frame_linker: paired frame→events (eventsarrived first) frame_id=72914 paired=1 still_pending=0frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=1 pending_eventotal_evicted=75 total_failed=02026-05-26T20:45:26.130315Z2026-05-26T20:45:27.455066ZINFOscreenpipe_engine:: frame.linker_actor:frame_linker: paired frame→events (events arrived first) frame_id=72920 paired-1 still_pending=0WARNscreenpipe_engine:: frame.linker_actor:frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_events=0pending_frames=12total_pairs=107total_evicted=78 total_failed=02026-05-26T20:45:29.737330ZINFO2026-05-26T20:45:30.043059Zscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id=72923 paired-1 still_pending=0INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-111 row_id=74168 frame_id=729252026-05-26T20:45:30.084288ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:30.732325ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26120:45:30.194010/4INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:33.577521ZWARNscreenpipe_engine:: frame.ts=0pending_frames=13total_pairs=109total_evicted-81linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=3 pending_even2026-05-26T20:45:33.577765ZINFOtotal_failed=0screenpipe_engine::frame_linker_actor: frame_linker: pairedevent»frame (frame arrived first) corr_id-112 row_id=74169 frame_id=729252026-05-26T20:45:33.578917ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-113 row_id-74170 frame_id=729262026-05-26T20:45:33.635766ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:33.720780ZINFO2026-05-26T20:45:34.134973ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531,trigger=typing_pause)screenpipe_engine::frame_linker_actor: frame_linker: paired event+frame (frame arrived first) corr_id-114 row_id=74171 frame_id=729252026-05-26T20:45:34.187590ZINFOscreenpipe_engine::event,_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8761272817118293531, trigger=typing_pause)2026-05-26T20:45:34.801124ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8761272817118293531,2026-05-26T20:45:36.205773ZINFOtrigger=typing_pause)screenpipe_engine::frame_linker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-115 row_id=74172 frame_id=729252026-05-26T20:45:37.783786ZWARNts=1pending_frames=13screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=2 pending_eventotal_pairs=113total_evicted=83 total_failed=02026-05-26T20:45:37.784009ZINFOscreenpipe_engine:: frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=72927 paired-1 still_pending=02026-05-26T20:45:39.806028ZINFOscreenpipe_engine:: framelinker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72929 paired-1still_pending=02026-05-26T20:45:47.855586ZINFOscreenpipe._engine: :event2026-05-26T20:45:52.585883ZINFOdriven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=visual_change)2026-05-26T20:45:52.6258747INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=72933 paired-1 still_pending=0screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-5575582890517815957, trigger=click)2026-05-26T20:45:56.264229ZINFOscreenpipe_engine:: framelinker_actor: frame_linker: paired event»frame (frame arrived first) corr_id-119 row_id=74177 frame_id=72934...
|
72935
|
NULL
|
NULL
|
NULL
|
|
72936
|
2619
|
76
|
2026-05-26T17:45:53.907078+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817553907_m2.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
http://192.168.0.242:8007/ui
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238
112
2,316
11
5,925
4,370
201
3,739
VS GOAL (8 000)
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Close
Low
Low
Low
❤️ Heart Rate (daily min / avg / max)
DATE
MIN
AVG
MAX
2026-05-25
54
66.7
102
2026-05-24
48
68.5
115
2026-05-23
52
73.5
112
2026-05-22
53
74.1...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.118914604,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.2571476,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.06482713,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"bounds":{"left":0.33926198,"top":0.070231445,"width":0.010139627,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.35804522,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.3643617,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"bounds":{"left":0.36818483,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.37450132,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.37832448,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.39045876,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"bounds":{"left":0.40458778,"top":0.070231445,"width":0.004654255,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.41788563,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.4242021,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"bounds":{"left":0.42802528,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.43434176,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.4381649,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.4502992,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"bounds":{"left":0.4644282,"top":0.06464485,"width":0.027593086,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"bounds":{"left":0.08344415,"top":0.13447726,"width":0.023105053,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"bounds":{"left":0.08344415,"top":0.15043895,"width":0.03158245,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"bounds":{"left":0.15359043,"top":0.13447726,"width":0.025265958,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"bounds":{"left":0.15359043,"top":0.15043895,"width":0.03125,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"bounds":{"left":0.2237367,"top":0.13447726,"width":0.0234375,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"bounds":{"left":0.2237367,"top":0.15043895,"width":0.025764627,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"bounds":{"left":0.29371676,"top":0.13447726,"width":0.035405584,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"bounds":{"left":0.29371676,"top":0.15043895,"width":0.02543218,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"bounds":{"left":0.36386302,"top":0.13447726,"width":0.035738032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"bounds":{"left":0.36386302,"top":0.15043895,"width":0.03274601,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"bounds":{"left":0.4340093,"top":0.13447726,"width":0.021775266,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"bounds":{"left":0.4340093,"top":0.15043895,"width":0.03307846,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"bounds":{"left":0.08344415,"top":0.22146848,"width":0.040226065,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"bounds":{"left":0.082446806,"top":0.4632881,"width":0.010638298,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"bounds":{"left":0.15890957,"top":0.4632881,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"bounds":{"left":0.22706117,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"bounds":{"left":0.33111703,"top":0.4632881,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"bounds":{"left":0.43600398,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"bounds":{"left":0.082446806,"top":0.49002394,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.49002394,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"bounds":{"left":0.22706117,"top":0.49002394,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"bounds":{"left":0.33111703,"top":0.49002394,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.49082202,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"bounds":{"left":0.082446806,"top":0.51835597,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.51835597,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"bounds":{"left":0.22706117,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"bounds":{"left":0.33111703,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.519154,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"bounds":{"left":0.082446806,"top":0.547087,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"bounds":{"left":0.15890957,"top":0.547087,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"bounds":{"left":0.22706117,"top":0.547087,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"bounds":{"left":0.33111703,"top":0.547087,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.54788506,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"bounds":{"left":0.082446806,"top":0.575419,"width":0.025265958,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"bounds":{"left":0.15890957,"top":0.575419,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"bounds":{"left":0.22706117,"top":0.575419,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"bounds":{"left":0.33111703,"top":0.575419,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.57621706,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"bounds":{"left":0.082446806,"top":0.60415006,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"bounds":{"left":0.15890957,"top":0.60415006,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.60415006,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"bounds":{"left":0.33111703,"top":0.60415006,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6049481,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"bounds":{"left":0.082446806,"top":0.6328811,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"bounds":{"left":0.15890957,"top":0.6328811,"width":0.013796543,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"bounds":{"left":0.22706117,"top":0.6328811,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"bounds":{"left":0.33111703,"top":0.6328811,"width":0.038896278,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.63367915,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"bounds":{"left":0.082446806,"top":0.6612131,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"bounds":{"left":0.15890957,"top":0.6612131,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.6612131,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"bounds":{"left":0.33111703,"top":0.6612131,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.66201115,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"bounds":{"left":0.082446806,"top":0.68994415,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"bounds":{"left":0.15890957,"top":0.68994415,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"bounds":{"left":0.22706117,"top":0.68994415,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"bounds":{"left":0.33111703,"top":0.68994415,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6907422,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"bounds":{"left":0.082446806,"top":0.71827614,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"bounds":{"left":0.15890957,"top":0.71827614,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"bounds":{"left":0.22706117,"top":0.71827614,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"bounds":{"left":0.33111703,"top":0.71827614,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.71907425,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"bounds":{"left":0.082446806,"top":0.7470072,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.7470072,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"bounds":{"left":0.22706117,"top":0.7470072,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"bounds":{"left":0.33111703,"top":0.7470072,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.74780524,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"bounds":{"left":0.082446806,"top":0.77573824,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"bounds":{"left":0.15890957,"top":0.77573824,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"bounds":{"left":0.22706117,"top":0.77573824,"width":0.03656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"bounds":{"left":0.33111703,"top":0.77573824,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.7765363,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"bounds":{"left":0.082446806,"top":0.80407023,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.80407023,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"bounds":{"left":0.22706117,"top":0.80407023,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"bounds":{"left":0.33111703,"top":0.80407023,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.80486834,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"bounds":{"left":0.082446806,"top":0.8328013,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.8328013,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"bounds":{"left":0.22706117,"top":0.8328013,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"bounds":{"left":0.33111703,"top":0.8328013,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.8335994,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"bounds":{"left":0.082446806,"top":0.8611333,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.8611333,"width":0.013131649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"bounds":{"left":0.22706117,"top":0.8611333,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"bounds":{"left":0.33111703,"top":0.8611333,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.8619314,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"bounds":{"left":0.082446806,"top":0.8898643,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.8898643,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"bounds":{"left":0.22706117,"top":0.8898643,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"bounds":{"left":0.33111703,"top":0.8898643,"width":0.03756649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.89066243,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"bounds":{"left":0.082446806,"top":0.9185954,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.9185954,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"bounds":{"left":0.22706117,"top":0.9185954,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"bounds":{"left":0.33111703,"top":0.9185954,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.9193935,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"bounds":{"left":0.082446806,"top":0.94692737,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.94692737,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.22706117,"top":0.94692737,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.33111703,"top":0.94692737,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9477255,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"bounds":{"left":0.082446806,"top":0.9756584,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.9756584,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.22706117,"top":0.9756584,"width":0.03856383,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.33111703,"top":0.9756584,"width":0.0390625,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9764565,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"bounds":{"left":0.082446806,"top":1.0,"width":0.025265958,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"bounds":{"left":0.15890957,"top":1.0,"width":0.015957447,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.22706117,"top":1.0,"width":0.038065158,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.33111703,"top":1.0,"width":0.03856383,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":1.0,"width":0.0071476065,"height":-0.004788518},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"bounds":{"left":0.082446806,"top":0.4632881,"width":0.010638298,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"bounds":{"left":0.082446806,"top":0.49002394,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"bounds":{"left":0.082446806,"top":0.51835597,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"bounds":{"left":0.082446806,"top":0.547087,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"bounds":{"left":0.082446806,"top":0.575419,"width":0.025265958,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"bounds":{"left":0.082446806,"top":0.60415006,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"bounds":{"left":0.082446806,"top":0.6328811,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"bounds":{"left":0.082446806,"top":0.6612131,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"bounds":{"left":0.082446806,"top":0.68994415,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"bounds":{"left":0.082446806,"top":0.71827614,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"bounds":{"left":0.082446806,"top":0.7470072,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"bounds":{"left":0.082446806,"top":0.77573824,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"bounds":{"left":0.082446806,"top":0.80407023,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"bounds":{"left":0.082446806,"top":0.8328013,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"bounds":{"left":0.082446806,"top":0.8611333,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"bounds":{"left":0.082446806,"top":0.8898643,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"bounds":{"left":0.082446806,"top":0.9185954,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"bounds":{"left":0.082446806,"top":0.94692737,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"bounds":{"left":0.082446806,"top":0.9756584,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"bounds":{"left":0.082446806,"top":1.0,"width":0.025265958,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"bounds":{"left":0.15890957,"top":0.4632881,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.49002394,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.51835597,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"bounds":{"left":0.15890957,"top":0.547087,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"bounds":{"left":0.15890957,"top":0.575419,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"bounds":{"left":0.15890957,"top":0.60415006,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"bounds":{"left":0.15890957,"top":0.6328811,"width":0.013796543,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"bounds":{"left":0.15890957,"top":0.6612131,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"bounds":{"left":0.15890957,"top":0.68994415,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"bounds":{"left":0.15890957,"top":0.71827614,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.7470072,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"bounds":{"left":0.15890957,"top":0.77573824,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.80407023,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.8328013,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.8611333,"width":0.013131649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.8898643,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.9185954,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.94692737,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.9756584,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"bounds":{"left":0.15890957,"top":1.0,"width":0.015957447,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"bounds":{"left":0.22706117,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"bounds":{"left":0.22706117,"top":0.49002394,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"bounds":{"left":0.22706117,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"bounds":{"left":0.22706117,"top":0.547087,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"bounds":{"left":0.22706117,"top":0.575419,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.60415006,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"bounds":{"left":0.22706117,"top":0.6328811,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.6612131,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"bounds":{"left":0.22706117,"top":0.68994415,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"bounds":{"left":0.22706117,"top":0.71827614,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"bounds":{"left":0.22706117,"top":0.7470072,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"bounds":{"left":0.22706117,"top":0.77573824,"width":0.03656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"bounds":{"left":0.22706117,"top":0.80407023,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"bounds":{"left":0.22706117,"top":0.8328013,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"bounds":{"left":0.22706117,"top":0.8611333,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"bounds":{"left":0.22706117,"top":0.8898643,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"bounds":{"left":0.22706117,"top":0.9185954,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.22706117,"top":0.94692737,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.22706117,"top":0.9756584,"width":0.03856383,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.22706117,"top":1.0,"width":0.038065158,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"bounds":{"left":0.33111703,"top":0.4632881,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"bounds":{"left":0.33111703,"top":0.49002394,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"bounds":{"left":0.33111703,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"bounds":{"left":0.33111703,"top":0.547087,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"bounds":{"left":0.33111703,"top":0.575419,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"bounds":{"left":0.33111703,"top":0.60415006,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"bounds":{"left":0.33111703,"top":0.6328811,"width":0.038896278,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"bounds":{"left":0.33111703,"top":0.6612131,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"bounds":{"left":0.33111703,"top":0.68994415,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"bounds":{"left":0.33111703,"top":0.71827614,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"bounds":{"left":0.33111703,"top":0.7470072,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"bounds":{"left":0.33111703,"top":0.77573824,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"bounds":{"left":0.33111703,"top":0.80407023,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"bounds":{"left":0.33111703,"top":0.8328013,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"bounds":{"left":0.33111703,"top":0.8611333,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"bounds":{"left":0.33111703,"top":0.8898643,"width":0.03756649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"bounds":{"left":0.33111703,"top":0.9185954,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.33111703,"top":0.94692737,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.33111703,"top":0.9756584,"width":0.0390625,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.33111703,"top":1.0,"width":0.03856383,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"bounds":{"left":0.43600398,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.49082202,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.519154,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.54788506,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.57621706,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6049481,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.63367915,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.66201115,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6907422,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.71907425,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.74780524,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.7765363,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.80486834,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.8335994,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.8619314,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.89066243,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.9193935,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9477255,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9764565,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":1.0,"width":0.0071476065,"height":-0.004788518},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"👟 Daily Steps","depth":2,"bounds":{"left":0.08344415,"top":1.0,"width":0.032247342,"height":-0.05666399},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,316","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,370","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"201","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,739","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,316","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,370","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"201","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,739","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"❤️ Heart Rate (daily min / avg / max)","depth":2,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MIN","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MAX","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"54","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66.7","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"102","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"48","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"68.5","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"115","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"52","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"73.5","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"53","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"74.1","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-998926441954601827
|
-4894159447740991640
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238
112
2,316
11
5,925
4,370
201
3,739
VS GOAL (8 000)
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Close
Low
Low
Low
❤️ Heart Rate (daily min / avg / max)
DATE
MIN
AVG
MAX
2026-05-25
54
66.7
102
2026-05-24
48
68.5
115
2026-05-23
52
73.5
112
2026-05-22
53
74.1...
|
72934
|
NULL
|
NULL
|
NULL
|
|
72935
|
2618
|
69
|
2026-05-26T17:45:52.688022+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817552688_m1.jpg...
|
Firefox
|
keychron Launcher — Personal
|
1
|
launcher.keychron.com/#/unsupported
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron Launcher","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron Launcher","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Connect","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher - V1.3.4","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only The Following Browsers Are Supported","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chrome","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Edge","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opera","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without An Keyboard","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without A Mouse","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle theme","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5575582890517815957
|
2216606358642707532
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72934
|
2619
|
75
|
2026-05-26T17:45:44.718716+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817544718_m2.jpg...
|
Firefox
|
keychron Launcher — Personal
|
1
|
launcher.keychron.com/#/unsupported
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron Launcher","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron Launcher","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.03307846,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.09142287,"top":0.12968874,"width":0.0063164895,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Connect","depth":8,"bounds":{"left":0.099567816,"top":0.13288109,"width":0.013131649,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher - V1.3.4","depth":4,"bounds":{"left":0.08809841,"top":0.97126895,"width":0.027925532,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":4,"bounds":{"left":0.2556516,"top":0.28850758,"width":0.0071476065,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only The Following Browsers Are Supported","depth":3,"bounds":{"left":0.26462767,"top":0.2897047,"width":0.109707445,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chrome","depth":4,"bounds":{"left":0.2471742,"top":0.44972068,"width":0.013464096,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Edge","depth":4,"bounds":{"left":0.37167552,"top":0.44972068,"width":0.008643617,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opera","depth":4,"bounds":{"left":0.2486702,"top":0.5961692,"width":0.010472074,"height":0.0103751},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.2534907,"top":0.745012,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without An Keyboard","depth":6,"bounds":{"left":0.2606383,"top":0.74581003,"width":0.04737367,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.32962102,"top":0.745012,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try Without A Mouse","depth":6,"bounds":{"left":0.33676863,"top":0.74581003,"width":0.039727394,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.4659242,"top":0.06863528,"width":0.005319149,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle theme","depth":4,"bounds":{"left":0.47672874,"top":0.06464485,"width":0.008976064,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":6,"bounds":{"left":0.47839096,"top":0.06863528,"width":0.005485372,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5575582890517815957
|
2216606358642707532
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron Launcher
keychron Launcher
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Connect
Launcher - V1.3.4
Only The Following Browsers Are Supported
Chrome
Edge
Opera
Try Without An Keyboard
Try Without A Mouse
Toggle theme
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72933
|
2618
|
68
|
2026-05-26T17:45:42.041322+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817542041_m1.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Tools
Tools
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...
How to use HE mode on Keychron Launcher
How to use HE mode on Keychron Launcher
Keychron
https://www.keychron.com
› pages › how-to-use-he-m...
About this result
Keychron HE keyboards
allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...
Launcher Tutorial YouTube · Keychron 51K+ followers
Launcher Tutorial
Launcher Tutorial
YouTube · Keychron
51K+ followers
About this result
Keychron. Playlist•1 video•719 views. Play all ... Introducing
Keychron Launcher
: Keymapping. Keychron.
People also search for
People also search for
Keychron Launcher download
Keychron Launcher
download
Keychron Launcher Firefox
Keychron Launcher
Firefox
Keychron launcher not connecting
Keychron launcher
not connecting
Keychron Launcher mouse
Keychron Launcher
mouse
Keychron Launcher offline
Keychron Launcher
offline
How to use Keychron Launcher
How to use
Keychron Launcher
Keychron Launcher Mac
Keychron Launcher
Mac
Keychron Launcher alternative
Keychron Launcher
alternative
Page navigation
Page navigation
1
Page 2
2
Page 3
3
Page 4
4
Page 5
5
Page 6
6
Page 7
7
Page 8
8
Page 9
9
Page 10
10
Next
Next
Next
Footer links
Footer links
Results are personalised
-
Try without personalisation
Try without personalisation
Bulgaria
Manastirski Livadi, Sofia - Based on your places (Home)
Manastirski Livadi, Sofia
-
Based on your places (Home)
-
Update location
Help
Help
Send feedback
Send feedback
Privacy
Privacy
Terms
Terms
http://launcher.keychron.com...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"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":1,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"on_screen":true,"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":2,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Mode","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Images","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Images","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Videos","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Videos","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Short videos","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Short videos","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"News","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"News","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More filters","depth":11,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Tools","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Tools","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Search Results","depth":2,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search Results","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"keychron Launcher keychron Launcher http://launcher.keychron.com","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXHeading","text":"keychron Launcher","depth":11,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://launcher.keychron.com","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Videos","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Videos","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":12,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron | With Keychron Custom Sound Effects, you can now ...","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instagram","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 week ago","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Customize your Keychron Keyboard with Keychron ...","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vasudev Menon","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 20, 2025","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introducing Keychron Launcher: Keymapping","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jul 11, 2024","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"11 key moments in this video","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11 key moments in this video","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HardReset.Info","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Oct 21, 2025","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"9 key moments in this video","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9 key moments in this video","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all videos","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View all","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Discussions and forums","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Discussions and forums","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"r/Keychron","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30+ comments","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8 months ago","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher does not work - Support","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher does not work - Support","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher does not work - Support","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Manjaro Linux Forum","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 months ago","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":11,"bounds":{"left":0.06701389,"top":0.0,"width":0.033333335,"height":0.04},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EndeavourOS Forum","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 answers","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 months ago","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":11,"bounds":{"left":0.06701389,"top":0.010555555,"width":0.033333335,"height":0.04},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"See more discussions","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"See more","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Advantages of the Keychron Launcher Web App","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advantages of the Keychron Launcher Web App","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › archived › advant...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher web app https://launcher.keychron.com","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher web app https://launcher.keychron.com","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit · r/Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20+ comments · 2 years ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"I recently was in touch with Keychron support, and they pointed me at","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://launcher.keychron.com","depth":11,"bounds":{"left":0.0,"top":0.41,"width":0.14097223,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to configure my keyboard. This was new to me.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Is the Launcher web app the only way to configure the ...","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Is the","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web app the only way to configure the ...","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47 posts","depth":11,"bounds":{"left":0.0,"top":0.46444446,"width":0.036805555,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dec 20, 2024","depth":11,"bounds":{"left":0.0,"top":0.46444446,"width":0.057638887,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one ...","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"today? The new layout is one ...","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"35 posts","depth":11,"bounds":{"left":0.0,"top":0.4888889,"width":0.036805555,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sep 17, 2025","depth":11,"bounds":{"left":0.0,"top":0.4888889,"width":0.057638887,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"More results from www.reddit.com","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More results from www.reddit.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Use Launcher To Program Your Keyboard","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Use Launcher To Program Your Keyboard","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › news › how-to-us...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Zendesk","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://keychronsupport.zendesk.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› en-us › articles","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jul 4, 2025","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure you have used the latest Chrome, Edge, or Opera browser version","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". 2. Ensure your keyboard is in a wired connection.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"a hand with keykron keyboards and remapping keys via ...","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"a hand with keykron keyboards and remapping keys via ...","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AppleVis","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.applevis.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› forum › hand-keykron-keyb...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jan 9, 2026","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keykron's keykron launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How to use HE mode on Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How to use HE mode on Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› pages › how-to-use-he-m...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron HE keyboards","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Launcher Tutorial YouTube · Keychron 51K+ followers","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Launcher Tutorial","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher Tutorial","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube · Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"51K+ followers","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron. Playlist•1 video•719 views. Play all ... Introducing","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": Keymapping. Keychron.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"People also search for","depth":8,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"People also search for","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher download","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"download","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher Firefox","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron launcher not connecting","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"not connecting","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher mouse","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mouse","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher offline","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"offline","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How to use Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher Mac","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mac","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher alternative","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"alternative","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Page navigation","depth":7,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Page navigation","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 2","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 3","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 4","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"4","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 5","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 6","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 7","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 8","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 9","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 10","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"10","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Next","depth":7,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Next","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Next","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Footer links","depth":3,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Footer links","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Results are personalised","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Try without personalisation","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Try without personalisation","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bulgaria","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manastirski Livadi, Sofia - Based on your places (Home)","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manastirski Livadi, Sofia","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your places (Home)","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Update location","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Help","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Send feedback","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send feedback","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Privacy","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Privacy","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Terms","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Terms","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://launcher.keychron.com","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-2947170690229770676
|
-8576000751757263761
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Tools
Tools
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...
How to use HE mode on Keychron Launcher
How to use HE mode on Keychron Launcher
Keychron
https://www.keychron.com
› pages › how-to-use-he-m...
About this result
Keychron HE keyboards
allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...
Launcher Tutorial YouTube · Keychron 51K+ followers
Launcher Tutorial
Launcher Tutorial
YouTube · Keychron
51K+ followers
About this result
Keychron. Playlist•1 video•719 views. Play all ... Introducing
Keychron Launcher
: Keymapping. Keychron.
People also search for
People also search for
Keychron Launcher download
Keychron Launcher
download
Keychron Launcher Firefox
Keychron Launcher
Firefox
Keychron launcher not connecting
Keychron launcher
not connecting
Keychron Launcher mouse
Keychron Launcher
mouse
Keychron Launcher offline
Keychron Launcher
offline
How to use Keychron Launcher
How to use
Keychron Launcher
Keychron Launcher Mac
Keychron Launcher
Mac
Keychron Launcher alternative
Keychron Launcher
alternative
Page navigation
Page navigation
1
Page 2
2
Page 3
3
Page 4
4
Page 5
5
Page 6
6
Page 7
7
Page 8
8
Page 9
9
Page 10
10
Next
Next
Next
Footer links
Footer links
Results are personalised
-
Try without personalisation
Try without personalisation
Bulgaria
Manastirski Livadi, Sofia - Based on your places (Home)
Manastirski Livadi, Sofia
-
Based on your places (Home)
-
Update location
Help
Help
Send feedback
Send feedback
Privacy
Privacy
Terms
Terms
http://launcher.keychron.com...
|
72929
|
NULL
|
NULL
|
NULL
|
|
72932
|
2619
|
74
|
2026-05-26T17:45:41.537052+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817541537_m2.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Tools
Tools
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...
How to use HE mode on Keychron Launcher
How to use HE mode on Keychron Launcher
Keychron
https://www.keychron.com
› pages › how-to-use-he-m...
About this result
Keychron HE keyboards
allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...
Launcher Tutorial YouTube · Keychron 51K+ followers
Launcher Tutorial
Launcher Tutorial
YouTube · Keychron
51K+ followers
About this result
Keychron. Playlist•1 video•719 views. Play all ... Introducing
Keychron Launcher
: Keymapping. Keychron.
People also search for
People also search for
Keychron Launcher download
Keychron Launcher
download
Keychron Launcher Firefox
Keychron Launcher
Firefox
Keychron launcher not connecting
Keychron launcher
not connecting
Keychron Launcher mouse
Keychron Launcher
mouse
Keychron Launcher offline
Keychron Launcher
offline
How to use Keychron Launcher
How to use
Keychron Launcher
Keychron Launcher Mac
Keychron Launcher
Mac
Keychron Launcher alternative
Keychron Launcher
alternative
Page navigation
Page navigation
1
Page 2
2
Page 3
3
Page 4
4
Page 5
5
Page 6
6
Page 7
7
Page 8
8
Page 9
9
Page 10
10
Next
Next
Next
Footer links
Footer links
Results are personalised
-
Try without personalisation
Try without personalisation
Bulgaria
Manastirski Livadi, Sofia - Based on your places (Home)
Manastirski Livadi, Sofia
-
Based on your places (Home)
-
Update location
Help
Help
Send feedback
Send feedback
Privacy
Privacy
Terms
Terms...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.061170213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"bounds":{"left":0.07795878,"top":0.101356745,"width":0.025598405,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"bounds":{"left":0.078125,"top":0.101356745,"width":0.025265958,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"bounds":{"left":0.1015625,"top":0.08060654,"width":0.030585106,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"bounds":{"left":0.15375665,"top":0.07342378,"width":0.17353724,"height":0.03990423},"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"bounds":{"left":0.15375665,"top":0.08539505,"width":0.04454787,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"bounds":{"left":0.32729387,"top":0.07342378,"width":0.015957447,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"bounds":{"left":0.34491357,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"bounds":{"left":0.35821143,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"bounds":{"left":0.3728391,"top":0.07342378,"width":0.01462766,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"bounds":{"left":0.46409574,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":2,"bounds":{"left":0.4800532,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.09757314,"top":0.12210695,"width":0.025930852,"height":0.03830806},"on_screen":true,"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.1015625,"top":0.13647246,"width":0.017952127,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All","depth":11,"bounds":{"left":0.12350399,"top":0.12210695,"width":0.013464096,"height":0.03830806},"on_screen":true,"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.12749335,"top":0.13647246,"width":0.005485372,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Images","depth":11,"bounds":{"left":0.13696809,"top":0.12210695,"width":0.023769947,"height":0.03830806},"on_screen":true,"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.14095744,"top":0.13647246,"width":0.015791224,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Videos","depth":11,"bounds":{"left":0.16073804,"top":0.12210695,"width":0.022772606,"height":0.03830806},"on_screen":true,"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.16472739,"top":0.13647246,"width":0.014793883,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Short videos","depth":11,"bounds":{"left":0.18351063,"top":0.12210695,"width":0.035738032,"height":0.03830806},"on_screen":true,"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.1875,"top":0.13647246,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"News","depth":11,"bounds":{"left":0.21924867,"top":0.12210695,"width":0.019780586,"height":0.03830806},"on_screen":true,"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.22323804,"top":0.13647246,"width":0.011801862,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums","depth":11,"bounds":{"left":0.23902926,"top":0.12210695,"width":0.024268618,"height":0.03830806},"on_screen":true,"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.24301861,"top":0.13647246,"width":0.016289894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More filters","depth":11,"bounds":{"left":0.2632979,"top":0.12210695,"width":0.025099734,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":14,"bounds":{"left":0.26728722,"top":0.13647246,"width":0.011136968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Tools","depth":10,"bounds":{"left":0.2883976,"top":0.12210695,"width":0.02543218,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Tools","depth":12,"bounds":{"left":0.29238698,"top":0.13647246,"width":0.011469414,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Search Results","depth":2,"bounds":{"left":0.06881649,"top":0.16041501,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search Results","depth":3,"bounds":{"left":0.06881649,"top":0.16041501,"width":0.03158245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":9,"bounds":{"left":0.1015625,"top":0.19832402,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":10,"bounds":{"left":0.1015625,"top":0.19752593,"width":0.03939495,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"keychron Launcher keychron Launcher http://launcher.keychron.com","depth":10,"bounds":{"left":0.1015625,"top":0.18994413,"width":0.064328454,"height":0.04030327},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"keychron Launcher","depth":11,"bounds":{"left":0.1015625,"top":0.21468475,"width":0.057347074,"height":0.024740623},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":12,"bounds":{"left":0.1015625,"top":0.21907422,"width":0.057347074,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":15,"bounds":{"left":0.11486037,"top":0.1859537,"width":0.03956117,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://launcher.keychron.com","depth":15,"bounds":{"left":0.11486037,"top":0.2019154,"width":0.051030584,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"bounds":{"left":0.16855054,"top":0.19872306,"width":0.00930851,"height":0.015961692},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"bounds":{"left":0.1015625,"top":0.2442139,"width":0.043716755,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...","depth":10,"bounds":{"left":0.1015625,"top":0.2442139,"width":0.21492687,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Videos","depth":9,"bounds":{"left":0.1015625,"top":0.3008779,"width":0.02244016,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Videos","depth":10,"bounds":{"left":0.1015625,"top":0.3008779,"width":0.02244016,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"bounds":{"left":0.12400266,"top":0.30327216,"width":0.017287234,"height":0.015961692},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":11,"bounds":{"left":0.15741356,"top":0.33758977,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":12,"bounds":{"left":0.15741356,"top":0.33758977,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron | With Keychron Custom Sound Effects, you can now ...","depth":15,"bounds":{"left":0.15741356,"top":0.33918595,"width":0.15508644,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instagram","depth":14,"bounds":{"left":0.15741356,"top":0.37110934,"width":0.020611702,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":14,"bounds":{"left":0.1810173,"top":0.37110934,"width":0.020944148,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 week ago","depth":14,"bounds":{"left":0.15741356,"top":0.3886672,"width":0.023769947,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":12,"bounds":{"left":0.19996676,"top":0.36871508,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46","depth":11,"bounds":{"left":0.1015625,"top":0.33758977,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":12,"bounds":{"left":0.15741356,"top":0.4237829,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":13,"bounds":{"left":0.15741356,"top":0.4237829,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Customize your Keychron Keyboard with Keychron ...","depth":16,"bounds":{"left":0.15741356,"top":0.4253791,"width":0.1456117,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":15,"bounds":{"left":0.15741356,"top":0.45730248,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vasudev Menon","depth":15,"bounds":{"left":0.17852394,"top":0.45730248,"width":0.034574468,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 20, 2025","depth":15,"bounds":{"left":0.15741356,"top":0.47486034,"width":0.026595745,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":13,"bounds":{"left":0.21110372,"top":0.45490822,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20","depth":12,"bounds":{"left":0.1015625,"top":0.4237829,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":12,"bounds":{"left":0.15741356,"top":0.509976,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":13,"bounds":{"left":0.15741356,"top":0.509976,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introducing Keychron Launcher: Keymapping","depth":16,"bounds":{"left":0.15741356,"top":0.51157224,"width":0.10837766,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":15,"bounds":{"left":0.15741356,"top":0.5434956,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"bounds":{"left":0.17852394,"top":0.5434956,"width":0.020944148,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jul 11, 2024","depth":15,"bounds":{"left":0.15741356,"top":0.56105345,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":13,"bounds":{"left":0.1974734,"top":0.54110134,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08","depth":12,"bounds":{"left":0.1015625,"top":0.509976,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"11 key moments in this video","depth":14,"bounds":{"left":0.1015625,"top":0.5857941,"width":0.10638298,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11 key moments in this video","depth":16,"bounds":{"left":0.1015625,"top":0.5913807,"width":0.06266622,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":12,"bounds":{"left":0.15741356,"top":0.6312849,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":13,"bounds":{"left":0.15741356,"top":0.6312849,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application","depth":16,"bounds":{"left":0.15741356,"top":0.6328811,"width":0.1484375,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":15,"bounds":{"left":0.15741356,"top":0.66480446,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HardReset.Info","depth":15,"bounds":{"left":0.17852394,"top":0.66480446,"width":0.032579787,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Oct 21, 2025","depth":15,"bounds":{"left":0.15741356,"top":0.6823623,"width":0.026595745,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":13,"bounds":{"left":0.20910904,"top":0.6624102,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37","depth":12,"bounds":{"left":0.1015625,"top":0.6312849,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"9 key moments in this video","depth":14,"bounds":{"left":0.1015625,"top":0.70710295,"width":0.10638298,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9 key moments in this video","depth":16,"bounds":{"left":0.12483378,"top":0.7126895,"width":0.061668884,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all videos","depth":10,"bounds":{"left":0.14810506,"top":0.74541104,"width":0.12367021,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View all","depth":12,"bounds":{"left":0.19697474,"top":0.75418997,"width":0.01662234,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Discussions and forums","depth":9,"bounds":{"left":0.1015625,"top":0.80606544,"width":0.077792555,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Discussions and forums","depth":10,"bounds":{"left":0.1015625,"top":0.80606544,"width":0.077792555,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":13,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.20079787,"height":0.039106146},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":14,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.19365026,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":15,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.19365026,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":16,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.19365026,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit","depth":16,"bounds":{"left":0.11087101,"top":0.8619314,"width":0.013796543,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"bounds":{"left":0.124667555,"top":0.8619314,"width":0.0038231383,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"r/Keychron","depth":18,"bounds":{"left":0.12849069,"top":0.86352754,"width":0.019614361,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":19,"bounds":{"left":0.14810506,"top":0.86352754,"width":0.0034906915,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30+ comments","depth":19,"bounds":{"left":0.15159574,"top":0.86352754,"width":0.026761968,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":18,"bounds":{"left":0.1783577,"top":0.86352754,"width":0.003656915,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8 months ago","depth":18,"bounds":{"left":0.18201463,"top":0.86352754,"width":0.024601065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"bounds":{"left":0.124667555,"top":0.8619314,"width":0.0038231383,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":14,"bounds":{"left":0.20661569,"top":0.8611333,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":11,"bounds":{"left":0.3023604,"top":0.84317636,"width":0.015957447,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":13,"bounds":{"left":0.1015625,"top":0.943336,"width":0.20079787,"height":0.039106146},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher does not work - Support","depth":14,"bounds":{"left":0.1015625,"top":0.943336,"width":0.10837766,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher does not work - Support","depth":15,"bounds":{"left":0.1015625,"top":0.943336,"width":0.10837766,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher does not work - Support","depth":16,"bounds":{"left":0.1015625,"top":0.943336,"width":0.10837766,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Manjaro Linux Forum","depth":16,"bounds":{"left":0.11087101,"top":0.96727854,"width":0.044714097,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"bounds":{"left":0.15558511,"top":0.96727854,"width":0.003656915,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 months ago","depth":18,"bounds":{"left":0.15924202,"top":0.9688747,"width":0.024601065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"bounds":{"left":0.15558511,"top":0.96727854,"width":0.003656915,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":14,"bounds":{"left":0.18384309,"top":0.96648043,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":11,"bounds":{"left":0.3023604,"top":0.9485235,"width":0.015957447,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":13,"bounds":{"left":0.1015625,"top":1.0,"width":0.20079787,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":14,"bounds":{"left":0.1015625,"top":1.0,"width":0.16472739,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":15,"bounds":{"left":0.1015625,"top":1.0,"width":0.16472739,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":16,"bounds":{"left":0.1015625,"top":1.0,"width":0.16472739,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EndeavourOS Forum","depth":16,"bounds":{"left":0.11087101,"top":1.0,"width":0.044215426,"height":-0.02633679},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"bounds":{"left":0.15508644,"top":1.0,"width":0.003656915,"height":-0.02633679},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 answers","depth":18,"bounds":{"left":0.15874335,"top":1.0,"width":0.018450798,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":19,"bounds":{"left":0.17719415,"top":1.0,"width":0.003656915,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 months ago","depth":19,"bounds":{"left":0.18085106,"top":1.0,"width":0.024601065,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"bounds":{"left":0.15508644,"top":1.0,"width":0.003656915,"height":-0.02633679},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":14,"bounds":{"left":0.20545213,"top":1.0,"width":0.017287234,"height":-0.025538683},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":11,"bounds":{"left":0.3023604,"top":1.0,"width":0.015957447,"height":-0.00758183},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"See more discussions","depth":10,"bounds":{"left":0.14810506,"top":1.0,"width":0.12367021,"height":-0.051077366},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"See more","depth":12,"bounds":{"left":0.19498006,"top":1.0,"width":0.020611702,"height":-0.059856296},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Advantages of the Keychron Launcher Web App","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advantages of the Keychron Launcher Web App","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › archived › advant...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher web app https://launcher.keychron.com","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher web app https://launcher.keychron.com","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit · r/Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20+ comments · 2 years ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"I recently was in touch with Keychron support, and they pointed me at","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://launcher.keychron.com","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to configure my keyboard. This was new to me.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Is the Launcher web app the only way to configure the ...","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Is the","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web app the only way to configure the ...","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47 posts","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dec 20, 2024","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one ...","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"today? The new layout is one ...","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"35 posts","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sep 17, 2025","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"More results from www.reddit.com","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More results from www.reddit.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Use Launcher To Program Your Keyboard","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Use Launcher To Program Your Keyboard","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › news › how-to-us...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Zendesk","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://keychronsupport.zendesk.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› en-us › articles","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jul 4, 2025","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure you have used the latest Chrome, Edge, or Opera browser version","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". 2. Ensure your keyboard is in a wired connection.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"a hand with keykron keyboards and remapping keys via ...","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"a hand with keykron keyboards and remapping keys via ...","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AppleVis","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.applevis.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› forum › hand-keykron-keyb...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jan 9, 2026","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keykron's keykron launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How to use HE mode on Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How to use HE mode on Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› pages › how-to-use-he-m...","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron HE keyboards","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Launcher Tutorial YouTube · Keychron 51K+ followers","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Launcher Tutorial","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher Tutorial","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube · Keychron","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"51K+ followers","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":10,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron. Playlist•1 video•719 views. Play all ... Introducing","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": Keymapping. Keychron.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"People also search for","depth":8,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"People also search for","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher download","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"download","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher Firefox","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron launcher not connecting","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"not connecting","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher mouse","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mouse","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher offline","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"offline","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How to use Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher Mac","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mac","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher alternative","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"alternative","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Page navigation","depth":7,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Page navigation","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 2","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 3","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 4","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"4","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 5","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 6","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 7","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 8","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 9","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 10","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"10","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Next","depth":7,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Next","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Next","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Footer links","depth":3,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Footer links","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Results are personalised","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Try without personalisation","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Try without personalisation","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bulgaria","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manastirski Livadi, Sofia - Based on your places (Home)","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manastirski Livadi, Sofia","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your places (Home)","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Update location","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Help","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Send feedback","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send feedback","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Privacy","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Privacy","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Terms","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Terms","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
806554554340859307
|
-8576000751757263761
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Tools
Tools
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...
How to use HE mode on Keychron Launcher
How to use HE mode on Keychron Launcher
Keychron
https://www.keychron.com
› pages › how-to-use-he-m...
About this result
Keychron HE keyboards
allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...
Launcher Tutorial YouTube · Keychron 51K+ followers
Launcher Tutorial
Launcher Tutorial
YouTube · Keychron
51K+ followers
About this result
Keychron. Playlist•1 video•719 views. Play all ... Introducing
Keychron Launcher
: Keymapping. Keychron.
People also search for
People also search for
Keychron Launcher download
Keychron Launcher
download
Keychron Launcher Firefox
Keychron Launcher
Firefox
Keychron launcher not connecting
Keychron launcher
not connecting
Keychron Launcher mouse
Keychron Launcher
mouse
Keychron Launcher offline
Keychron Launcher
offline
How to use Keychron Launcher
How to use
Keychron Launcher
Keychron Launcher Mac
Keychron Launcher
Mac
Keychron Launcher alternative
Keychron Launcher
alternative
Page navigation
Page navigation
1
Page 2
2
Page 3
3
Page 4
4
Page 5
5
Page 6
6
Page 7
7
Page 8
8
Page 9
9
Page 10
10
Next
Next
Next
Footer links
Footer links
Results are personalised
-
Try without personalisation
Try without personalisation
Bulgaria
Manastirski Livadi, Sofia - Based on your places (Home)
Manastirski Livadi, Sofia
-
Based on your places (Home)
-
Update location
Help
Help
Send feedback
Send feedback
Privacy
Privacy
Terms
Terms...
|
72931
|
NULL
|
NULL
|
NULL
|
|
72931
|
2619
|
73
|
2026-05-26T17:45:38.456682+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817538456_m2.jpg...
|
Code
|
Review project and plan … — garmin-connector [SSH: Review project and plan … — garmin-connector [SSH: nas]...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the
Sleep
table only stores
start
,
end
,
duration_minutes
. It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.
sleep_processing.py
already parses all of this.
8.
HeartRate
rows volume
Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.
Code Quality
Code Quality
9. Session management is fragile
main.py:35-44
main.py:35-44
—
get_client()
re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on
401
errors.
10.
demo.py
depends on
readchar
not in
requirements.txt
requirements.txt
requirements.txt
—
demo.py
imports
readchar
which isn't listed, so
pip install -r requirements.txt
won't cover it. Either add it or keep a separate
requirements-dev.txt
.
Summary:
The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in
sleep_processing.py
for richer data, and (4) add a backfill endpoint for historical data.
Message actions
.env
.env
is there some UI. what is the database and what data are stored?
Thinking
Thinking
Bash
Check if garmin containers are running
IN
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check all garmin containers including stopped ones
IN
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
List all Docker containers
IN
docker ps -a 2>/dev/null | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check Docker availability
IN
docker info 2>&1 | head -5
Copy code to clipboard
OUT
Client: Docker Engine - Community
Version: 26.1.0
Context: default
Debug Mode: false
Plugins:
Bash
List all containers with names and status
IN
docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
Bash
List Docker contexts
IN
docker context ls 2>&1
Copy code to clipboard
OUT
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
Bash
List all containers with sudo
IN
sudo docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | head -30
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check docker socket and current user groups
IN
ls /var/run/docker.sock 2>&1 && groups 2>&1
Copy code to clipboard
OUT
/var/run/docker.sock
admin users ughomeusers Media Social
Bash
Try docker ps with explicit socket
IN
DOCKER_HOST=unix:///var/run/docker.sock docker ps -a 2>&1 | head -20
Copy code to clipboard
OUT
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
Thinking
Thinking
Docker isn't accessible from this shell session, so I can't query the live DB. But I can answer fully from the code.
UI
UI
Only FastAPI's built-in Swagger UI
— no custom frontend exists.
Once the service is running, open in browser:
http://<your-nas-ip>:8007/docs
— interactive Swagger UI, lets you call all endpoints
http://<your-nas-ip>:8007/redoc
— alternative docs view
That's the only UI. There's no dashboard, no charts, no frontend.
Database
Database
PostgreSQL
(
garmin-db
, exposed on port
5436
).
Three tables, defined in
models.py
models.py
:
sleep
sleep
Column
Type
Notes
id
Integer PK
date
Date
start
String
GMT timestamp (stored as raw string from Garmin)
end
String
GMT timestamp
duration_minutes
Integer
sleepTimeSeconds / 60
Column
id
date
start
end
duration_minutes
Type
Integer PK
Date
String
String
Integer
Notes
GMT timestamp (stored as raw string from Garmin)
GMT timestamp
sleepTimeSeconds / 60
Column
Type
Notes
steps
steps
Column
Type
Notes
id
Integer PK
date
Date
steps
Integer
Sum of all 15-min interval buckets for the day
Column
id
date
steps
Type
Integer PK
Date
Integer
Notes
Sum of all 15-min interval buckets for the day
Column
Type
Notes
heartrate
heartrate
Column
Type
Notes
id
Integer PK
date
Date
time
Time
Time of reading
bpm
Integer
Beats per minute
Column...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":11,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":11,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":11,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":11,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":11,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":11,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":14,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":11,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":11,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":9,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":10,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: garmin-connector [SSH: nas]","depth":13,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: garmin-connector [SSH: nas]","depth":14,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.06349734,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"GARMIN-CONNECTOR [SSH: NAS]","depth":15,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.06349734,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":26,"bounds":{"left":0.025265958,"top":0.07980846,"width":0.060837764,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":19,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"examples","depth":19,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.02825798,"top":0.11412609,"width":0.016954787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1292897,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":19,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.13168396,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.14684756,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":19,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":19,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":19,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.18435754,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":19,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2019154,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.02925532,"top":0.2019154,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":19,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.21947326,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029587766,"top":0.21947326,"width":0.012300532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"models.py","depth":19,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.23703113,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.029587766,"top":0.23703113,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"python-garminconnect-testing.md","depth":19,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.06948138,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":30,"bounds":{"left":0.028590426,"top":0.254589,"width":0.066821806,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":19,"bounds":{"left":0.025930852,"top":0.27134877,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":19,"bounds":{"left":0.025930852,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2897047,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.027593086,"top":0.2897047,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":19,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.04155585,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.02825798,"top":0.30726257,"width":0.039228722,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ui.html","depth":19,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.010970744,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":14,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":15,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":14,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":15,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":".env, preview, Editor Group 1","depth":20,"bounds":{"left":0.10638298,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.109707445,"top":0.05347167,"width":0.0063164895,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.118351065,"top":0.05586592,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.11170213,"top":0.07661612,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":22,"bounds":{"left":0.119015954,"top":0.07821229,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.119015954,"top":0.079010375,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.12034574,"top":0.079010375,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXTextArea","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":20,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.014365523},"on_screen":true,"value":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":21,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":36,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.084109046,"height":0.025538707}},{"char_start":37,"char_count":35,"bounds":{"left":0.1306516,"top":0.10933759,"width":0.07945479,"height":0.011173184}},{"char_start":72,"char_count":1,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.0023271276,"height":0.011173184}},{"char_start":73,"char_count":21,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.048204787,"height":0.025538707}},{"char_start":94,"char_count":33,"bounds":{"left":0.12832446,"top":0.15243416,"width":0.07679521,"height":0.025538707}},{"char_start":127,"char_count":22,"bounds":{"left":0.12832446,"top":0.16679968,"width":0.050531916,"height":0.025538707}},{"char_start":149,"char_count":17,"bounds":{"left":0.12832446,"top":0.1811652,"width":0.03856383,"height":0.025538707}},{"char_start":166,"char_count":17,"bounds":{"left":0.1306516,"top":0.19553073,"width":0.04089096,"height":0.011173184}}],"role_description":"text"},{"role":"AXRadioButton","text":"Review project and plan …, Editor Group 2","depth":20,"bounds":{"left":0.55352396,"top":0.047885075,"width":0.0731383,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Review project and plan …","depth":23,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.05285904,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":24,"bounds":{"left":0.5668218,"top":0.05586592,"width":0.050199468,"height":0.011971269}}],"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":14,"bounds":{"left":0.109042555,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":16,"bounds":{"left":0.11303192,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":14,"bounds":{"left":0.13663563,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":16,"bounds":{"left":0.140625,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":14,"bounds":{"left":0.15990691,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":16,"bounds":{"left":0.16389628,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":14,"bounds":{"left":0.19946809,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":16,"bounds":{"left":0.20345744,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.20378989,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.20611702,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":14,"bounds":{"left":0.22606383,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":16,"bounds":{"left":0.23005319,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal 5, bash Use ⌥F1 for terminal accessibility help","depth":28,"bounds":{"left":0.24567819,"top":0.97126895,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.107380316,"top":0.97047085,"width":0.005319149,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal input","depth":29,"bounds":{"left":0.4225399,"top":0.7573823,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":8,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":9,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":8,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":8,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":8,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot status","depth":8,"bounds":{"left":0.9790558,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Command Succeeded","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Review project and plan improvements","depth":2,"bounds":{"left":0.55585104,"top":0.08060654,"width":0.09075798,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":2,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":2,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"demo.py","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the project structure first.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all files in garmin-connector project","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/garmin-connector -type f | sort","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/garmin-connector/db.py\n/volume2/docker/garmin-connector/demo.py\n/volume2/docker/garmin-connector/docker-compose.yml\n/volume2/docker/garmin-connector/Dockerfile\n/volume2/docker/garmin-connector/.env\n/volume2/docker/garmin-connector/examples/sleep_data_example.json\n/volume2/docker/garmin-connector/main.py\n/volume2/docker/garmin-connector/models.py\n/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc\n/volume2/docker/garmin-connector/python-garminconnect-testing.md\n/volume2/docker/garmin-connector/README.md\n/volume2/docker/garmin-connector/requirements.txt\n/volume2/docker/garmin-connector/sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of this project. Here's the full overview:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Service Overview","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Service Overview","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"This is a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Garmin Connect data pipeline","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a FastAPI service that:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authenticates to Garmin Connect using your credentials","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches health/fitness data (sleep, steps, heart rate) via the unofficial","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garminconnect","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Python library","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stores it in a local PostgreSQL database","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Runs on Docker (port","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8007","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Architecture","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Architecture","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker\n├── garmin-api (FastAPI, port 8007)\n│ ├── Daily scheduler (currently 15:25 UTC)\n│ └── REST endpoints\n└── garmin-db (PostgreSQL, port 5436)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to Use","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to Use","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Start it:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume2/docker/garmin-connector\ndocker-compose up -d","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Available endpoints:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Interactive demo script","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":") is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pip install garminconnect readchar requests\npython demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Issues & Improvement Suggestions","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Issues & Improvement Suggestions","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Critical","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Critical","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1. Credentials exposed in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Your Garmin password is stored in plaintext in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— add","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"immediately if this repo is ever pushed to git.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2. Duplicate data on repeated runs","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:58-93","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:58-93","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"fetch_and_store()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"blindly","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"db.add()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"s every time it runs. Calling","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/fetch-today","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"twice creates duplicate rows for the same date. You need an upsert pattern (","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ON CONFLICT DO UPDATE","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or check-before-insert).","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3. Scheduler time comment is wrong","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:101-103","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:101-103","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the code schedules at","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"hour=15, minute=25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"but the comment says \"03:00\". Pick one and fix both.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Missing Functionality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Missing Functionality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4. No read endpoints for stored DB data","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There are no","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /steps","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /heartrate","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5. No backfill endpoint","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There's no way to fetch and store data for a past date range via the API. A","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch?date=2025-05-01","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /backfill?start=2025-01-01&end=2025-05-25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint would be useful.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"6.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is never used","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/sleep-processed","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint or removed.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Data Model Gaps","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Data Model Gaps","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"7. Sleep model loses detail","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py:6-13","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py:6-13","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"table only stores","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"start","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"end","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"duration_minutes","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":". It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"already parses all of this.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HeartRate","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"rows volume","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Code Quality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Code Quality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"9. Session management is fragile","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:35-44","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:35-44","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_client()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"401","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"errors.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"10.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"depends on","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"readchar","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"not in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"imports","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"readchar","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"which isn't listed, so","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pip install -r requirements.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"won't cover it. Either add it or keep a separate","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"requirements-dev.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Summary:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for richer data, and (4) add a backfill endpoint for historical data.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":".env","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is there some UI. what is the database and what data are stored?","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check if garmin containers are running","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | grep -E \"garmin|NAMES\"","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check all garmin containers including stopped ones","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | grep -E \"garmin|NAMES\"","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all Docker containers","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a 2>/dev/null | head -20","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check Docker availability","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker info 2>&1 | head -5","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Client: Docker Engine - Community\n Version: 26.1.0\n Context: default\n Debug Mode: false\n Plugins:","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all containers with names and status","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a --format \"{{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List Docker contexts","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker context ls 2>&1","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"NAME DESCRIPTION DOCKER ENDPOINT ERROR\ndefault * Current DOCKER_HOST based configuration unix:///var/run/docker.sock","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all containers with sudo","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sudo docker ps -a --format \"{{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | head -30","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check docker socket and current user groups","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /var/run/docker.sock 2>&1 && groups 2>&1","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/var/run/docker.sock\nadmin users ughomeusers Media Social","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Try docker ps with explicit socket","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DOCKER_HOST=unix:///var/run/docker.sock docker ps -a 2>&1 | head -20","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1\": dial unix /var/run/docker.sock: connect: permission denied","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Docker isn't accessible from this shell session, so I can't query the live DB. But I can answer fully from the code.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"UI","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"UI","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Only FastAPI's built-in Swagger UI","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— no custom frontend exists.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Once the service is running, open in browser:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"http://<your-nas-ip>:8007/docs","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— interactive Swagger UI, lets you call all endpoints","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"http://<your-nas-ip>:8007/redoc","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— alternative docs view","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"That's the only UI. There's no dashboard, no charts, no frontend.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Database","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Database","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostgreSQL","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garmin-db","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", exposed on port","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5436","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":").","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Three tables, defined in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"sleep","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer PK","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"date","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"start","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"String","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GMT timestamp (stored as raw string from Garmin)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"end","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"String","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GMT timestamp","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"duration_minutes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleepTimeSeconds / 60","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"date","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"start","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"end","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"duration_minutes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer PK","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"String","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"String","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GMT timestamp (stored as raw string from Garmin)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GMT timestamp","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleepTimeSeconds / 60","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"steps","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"steps","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer PK","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"date","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"steps","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sum of all 15-min interval buckets for the day","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"date","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"steps","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer PK","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sum of all 15-min interval buckets for the day","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"heartrate","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"heartrate","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer PK","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"date","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"time","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Time","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Time of reading","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"bpm","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Beats per minute","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":8,"on_screen":false,"role_description":"text"}]...
|
5229462254481298555
|
-5923753251867819505
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the
Sleep
table only stores
start
,
end
,
duration_minutes
. It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.
sleep_processing.py
already parses all of this.
8.
HeartRate
rows volume
Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.
Code Quality
Code Quality
9. Session management is fragile
main.py:35-44
main.py:35-44
—
get_client()
re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on
401
errors.
10.
demo.py
depends on
readchar
not in
requirements.txt
requirements.txt
requirements.txt
—
demo.py
imports
readchar
which isn't listed, so
pip install -r requirements.txt
won't cover it. Either add it or keep a separate
requirements-dev.txt
.
Summary:
The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in
sleep_processing.py
for richer data, and (4) add a backfill endpoint for historical data.
Message actions
.env
.env
is there some UI. what is the database and what data are stored?
Thinking
Thinking
Bash
Check if garmin containers are running
IN
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check all garmin containers including stopped ones
IN
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
List all Docker containers
IN
docker ps -a 2>/dev/null | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check Docker availability
IN
docker info 2>&1 | head -5
Copy code to clipboard
OUT
Client: Docker Engine - Community
Version: 26.1.0
Context: default
Debug Mode: false
Plugins:
Bash
List all containers with names and status
IN
docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
Bash
List Docker contexts
IN
docker context ls 2>&1
Copy code to clipboard
OUT
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
Bash
List all containers with sudo
IN
sudo docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | head -30
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check docker socket and current user groups
IN
ls /var/run/docker.sock 2>&1 && groups 2>&1
Copy code to clipboard
OUT
/var/run/docker.sock
admin users ughomeusers Media Social
Bash
Try docker ps with explicit socket
IN
DOCKER_HOST=unix:///var/run/docker.sock docker ps -a 2>&1 | head -20
Copy code to clipboard
OUT
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
Thinking
Thinking
Docker isn't accessible from this shell session, so I can't query the live DB. But I can answer fully from the code.
UI
UI
Only FastAPI's built-in Swagger UI
— no custom frontend exists.
Once the service is running, open in browser:
http://<your-nas-ip>:8007/docs
— interactive Swagger UI, lets you call all endpoints
http://<your-nas-ip>:8007/redoc
— alternative docs view
That's the only UI. There's no dashboard, no charts, no frontend.
Database
Database
PostgreSQL
(
garmin-db
, exposed on port
5436
).
Three tables, defined in
models.py
models.py
:
sleep
sleep
Column
Type
Notes
id
Integer PK
date
Date
start
String
GMT timestamp (stored as raw string from Garmin)
end
String
GMT timestamp
duration_minutes
Integer
sleepTimeSeconds / 60
Column
id
date
start
end
duration_minutes
Type
Integer PK
Date
String
String
Integer
Notes
GMT timestamp (stored as raw string from Garmin)
GMT timestamp
sleepTimeSeconds / 60
Column
Type
Notes
steps
steps
Column
Type
Notes
id
Integer PK
date
Date
steps
Integer
Sum of all 15-min interval buckets for the day
Column
id
date
steps
Type
Integer PK
Date
Integer
Notes
Sum of all 15-min interval buckets for the day
Column
Type
Notes
heartrate
heartrate
Column
Type
Notes
id
Integer PK
date
Date
time
Time
Time of reading
bpm
Integer
Beats per minute
Column...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72930
|
2619
|
72
|
2026-05-26T17:45:37.891876+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817537891_m2.jpg...
|
Code
|
Review project and plan … — garmin-connector [SSH: Review project and plan … — garmin-connector [SSH: nas]...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":11,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":11,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":11,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":11,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":11,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":11,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":14,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":11,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":11,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":9,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":10,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: garmin-connector [SSH: nas]","depth":13,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: garmin-connector [SSH: nas]","depth":14,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.06349734,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"GARMIN-CONNECTOR [SSH: NAS]","depth":15,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.06349734,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":26,"bounds":{"left":0.025265958,"top":0.07980846,"width":0.060837764,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":19,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"examples","depth":19,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.02825798,"top":0.11412609,"width":0.016954787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1292897,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":19,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.13168396,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.14684756,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":19,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":19,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":19,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.18435754,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":19,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2019154,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.02925532,"top":0.2019154,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":19,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.21947326,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029587766,"top":0.21947326,"width":0.012300532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"models.py","depth":19,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.23703113,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.029587766,"top":0.23703113,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"python-garminconnect-testing.md","depth":19,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.06948138,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":30,"bounds":{"left":0.028590426,"top":0.254589,"width":0.066821806,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":19,"bounds":{"left":0.025930852,"top":0.27134877,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":19,"bounds":{"left":0.025930852,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2897047,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.027593086,"top":0.2897047,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":19,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.04155585,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.02825798,"top":0.30726257,"width":0.039228722,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ui.html","depth":19,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.010970744,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":14,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":15,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":14,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":15,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":".env, preview, Editor Group 1","depth":20,"bounds":{"left":0.10638298,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.109707445,"top":0.05347167,"width":0.0063164895,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.118351065,"top":0.05586592,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.11170213,"top":0.07661612,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":22,"bounds":{"left":0.119015954,"top":0.07821229,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.119015954,"top":0.079010375,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.12034574,"top":0.079010375,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXTextArea","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":20,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.014365523},"on_screen":true,"value":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":21,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":36,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.084109046,"height":0.025538707}},{"char_start":37,"char_count":35,"bounds":{"left":0.1306516,"top":0.10933759,"width":0.07945479,"height":0.011173184}},{"char_start":72,"char_count":1,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.0023271276,"height":0.011173184}},{"char_start":73,"char_count":21,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.048204787,"height":0.025538707}},{"char_start":94,"char_count":33,"bounds":{"left":0.12832446,"top":0.15243416,"width":0.07679521,"height":0.025538707}},{"char_start":127,"char_count":22,"bounds":{"left":0.12832446,"top":0.16679968,"width":0.050531916,"height":0.025538707}},{"char_start":149,"char_count":17,"bounds":{"left":0.12832446,"top":0.1811652,"width":0.03856383,"height":0.025538707}},{"char_start":166,"char_count":17,"bounds":{"left":0.1306516,"top":0.19553073,"width":0.04089096,"height":0.011173184}}],"role_description":"text"},{"role":"AXRadioButton","text":"Review project and plan …, Editor Group 2","depth":20,"bounds":{"left":0.55352396,"top":0.047885075,"width":0.0731383,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Review project and plan …","depth":23,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.05285904,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":24,"bounds":{"left":0.5668218,"top":0.05586592,"width":0.050199468,"height":0.011971269}}],"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":14,"bounds":{"left":0.109042555,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":16,"bounds":{"left":0.11303192,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":14,"bounds":{"left":0.13663563,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":16,"bounds":{"left":0.140625,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":14,"bounds":{"left":0.15990691,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":16,"bounds":{"left":0.16389628,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":14,"bounds":{"left":0.19946809,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":16,"bounds":{"left":0.20345744,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.20378989,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.20611702,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":14,"bounds":{"left":0.22606383,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":16,"bounds":{"left":0.23005319,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal 5, bash Use ⌥F1 for terminal accessibility help","depth":28,"bounds":{"left":0.24567819,"top":0.97126895,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.107380316,"top":0.97047085,"width":0.005319149,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal input","depth":29,"bounds":{"left":0.4225399,"top":0.7573823,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":8,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":9,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":8,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":8,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":8,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot status","depth":8,"bounds":{"left":0.9790558,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Command Succeeded","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Review project and plan improvements","depth":2,"bounds":{"left":0.55585104,"top":0.08060654,"width":0.09075798,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":2,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":2,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"demo.py","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the project structure first.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all files in garmin-connector project","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/garmin-connector -type f | sort","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/garmin-connector/db.py\n/volume2/docker/garmin-connector/demo.py\n/volume2/docker/garmin-connector/docker-compose.yml\n/volume2/docker/garmin-connector/Dockerfile\n/volume2/docker/garmin-connector/.env\n/volume2/docker/garmin-connector/examples/sleep_data_example.json\n/volume2/docker/garmin-connector/main.py\n/volume2/docker/garmin-connector/models.py\n/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc\n/volume2/docker/garmin-connector/python-garminconnect-testing.md\n/volume2/docker/garmin-connector/README.md\n/volume2/docker/garmin-connector/requirements.txt\n/volume2/docker/garmin-connector/sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of this project. Here's the full overview:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Service Overview","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Service Overview","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"This is a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Garmin Connect data pipeline","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a FastAPI service that:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authenticates to Garmin Connect using your credentials","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches health/fitness data (sleep, steps, heart rate) via the unofficial","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garminconnect","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Python library","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stores it in a local PostgreSQL database","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Runs on Docker (port","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8007","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Architecture","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Architecture","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker\n├── garmin-api (FastAPI, port 8007)\n│ ├── Daily scheduler (currently 15:25 UTC)\n│ └── REST endpoints\n└── garmin-db (PostgreSQL, port 5436)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to Use","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to Use","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Start it:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume2/docker/garmin-connector\ndocker-compose up -d","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Available endpoints:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Interactive demo script","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":") is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pip install garminconnect readchar requests\npython demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Issues & Improvement Suggestions","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Issues & Improvement Suggestions","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Critical","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Critical","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1. Credentials exposed in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Your Garmin password is stored in plaintext in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— add","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"immediately if this repo is ever pushed to git.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2. Duplicate data on repeated runs","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:58-93","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:58-93","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"fetch_and_store()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"blindly","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"db.add()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"s every time it runs. Calling","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/fetch-today","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"twice creates duplicate rows for the same date. You need an upsert pattern (","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ON CONFLICT DO UPDATE","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or check-before-insert).","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3. Scheduler time comment is wrong","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:101-103","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:101-103","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the code schedules at","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"hour=15, minute=25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"but the comment says \"03:00\". Pick one and fix both.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Missing Functionality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Missing Functionality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4. No read endpoints for stored DB data","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There are no","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /steps","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /heartrate","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5. No backfill endpoint","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There's no way to fetch and store data for a past date range via the API. A","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch?date=2025-05-01","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /backfill?start=2025-01-01&end=2025-05-25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint would be useful.","depth":6,"on_screen":false,"role_description":"text"}]...
|
-1423064793578492267
|
-3906712640940227009
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful....
|
72927
|
NULL
|
NULL
|
NULL
|
|
72929
|
2618
|
67
|
2026-05-26T17:45:37.783749+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817537783_m1.jpg...
|
Code
|
Review project and plan … — garmin-connector [SSH: Review project and plan … — garmin-connector [SSH: nas]...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":9,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":10,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: garmin-connector [SSH: nas]","depth":13,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: garmin-connector [SSH: nas]","depth":14,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"GARMIN-CONNECTOR [SSH: NAS]","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"examples","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"models.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"python-garminconnect-testing.md","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ui.html","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":13,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":14,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":13,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":14,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":".env, preview, Editor Group 1","depth":20,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":20,"on_screen":true,"value":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Review project and plan …, Editor Group 2","depth":20,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Review project and plan …","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal 5, bash Use ⌥F1 for terminal accessibility help","depth":28,"bounds":{"left":0.0,"top":0.0,"width":0.0048611113,"height":0.015555556},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal input","depth":29,"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot status","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Command Succeeded","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Review project and plan improvements","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":2,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":2,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"demo.py","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the project structure first.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all files in garmin-connector project","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/garmin-connector -type f | sort","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/garmin-connector/db.py\n/volume2/docker/garmin-connector/demo.py\n/volume2/docker/garmin-connector/docker-compose.yml\n/volume2/docker/garmin-connector/Dockerfile\n/volume2/docker/garmin-connector/.env\n/volume2/docker/garmin-connector/examples/sleep_data_example.json\n/volume2/docker/garmin-connector/main.py\n/volume2/docker/garmin-connector/models.py\n/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc\n/volume2/docker/garmin-connector/python-garminconnect-testing.md\n/volume2/docker/garmin-connector/README.md\n/volume2/docker/garmin-connector/requirements.txt\n/volume2/docker/garmin-connector/sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of this project. Here's the full overview:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Service Overview","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Service Overview","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"This is a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Garmin Connect data pipeline","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a FastAPI service that:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authenticates to Garmin Connect using your credentials","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches health/fitness data (sleep, steps, heart rate) via the unofficial","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garminconnect","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Python library","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stores it in a local PostgreSQL database","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Runs on Docker (port","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8007","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Architecture","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Architecture","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker\n├── garmin-api (FastAPI, port 8007)\n│ ├── Daily scheduler (currently 15:25 UTC)\n│ └── REST endpoints\n└── garmin-db (PostgreSQL, port 5436)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to Use","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to Use","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Start it:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume2/docker/garmin-connector\ndocker-compose up -d","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Available endpoints:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"}]...
|
-1967399773147532606
|
7874704053986574926
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72928
|
2618
|
66
|
2026-05-26T17:45:36.308104+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817536308_m1.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"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":1,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"on_screen":true,"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":2,"on_screen":true,"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":5,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Mode","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All","depth":5,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Images","depth":5,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Images","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Videos","depth":5,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Videos","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Short videos","depth":5,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Short videos","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"News","depth":5,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"News","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums","depth":5,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More filters","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Search Results","depth":2,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search Results","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"keychron Launcher keychron Launcher http://launcher.keychron.com","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"keychron Launcher","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://launcher.keychron.com","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Videos","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Videos","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron | With Keychron Custom Sound Effects, you can now ...","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instagram","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 week ago","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Customize your Keychron Keyboard with Keychron ...","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vasudev Menon","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 20, 2025","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introducing Keychron Launcher: Keymapping","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jul 11, 2024","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"11 key moments in this video","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11 key moments in this video","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HardReset.Info","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Oct 21, 2025","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"9 key moments in this video","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9 key moments in this video","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all videos","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View all","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Discussions and forums","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Discussions and forums","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":11,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"r/Keychron","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30+ comments","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8 months ago","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher does not work - Support","depth":11,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher does not work - Support","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher does not work - Support","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Manjaro Linux Forum","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 months ago","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":8,"bounds":{"left":0.06701389,"top":0.0,"width":0.033333335,"height":0.04},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EndeavourOS Forum","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 answers","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 months ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":8,"bounds":{"left":0.06701389,"top":0.010555555,"width":0.033333335,"height":0.04},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"See more discussions","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"See more","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":7,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Advantages of the Keychron Launcher Web App","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advantages of the Keychron Launcher Web App","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › archived › advant...","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher web app https://launcher.keychron.com","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher web app https://launcher.keychron.com","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit · r/Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20+ comments · 2 years ago","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"I recently was in touch with Keychron support, and they pointed me at","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://launcher.keychron.com","depth":9,"bounds":{"left":0.0,"top":0.41,"width":0.14097223,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to configure my keyboard. This was new to me.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Is the Launcher web app the only way to configure the ...","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Is the","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web app the only way to configure the ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47 posts","depth":8,"bounds":{"left":0.0,"top":0.46444446,"width":0.036805555,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dec 20, 2024","depth":8,"bounds":{"left":0.0,"top":0.46444446,"width":0.057638887,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one ...","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"today? The new layout is one ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"35 posts","depth":8,"bounds":{"left":0.0,"top":0.4888889,"width":0.036805555,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sep 17, 2025","depth":8,"bounds":{"left":0.0,"top":0.4888889,"width":0.057638887,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"More results from www.reddit.com","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More results from www.reddit.com","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Use Launcher To Program Your Keyboard","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Use Launcher To Program Your Keyboard","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › news › how-to-us...","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Zendesk","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://keychronsupport.zendesk.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› en-us › articles","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jul 4, 2025","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure you have used the latest Chrome, Edge, or Opera browser version","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". 2. Ensure your keyboard is in a wired connection.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"a hand with keykron keyboards and remapping keys via ...","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"a hand with keykron keyboards and remapping keys via ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AppleVis","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.applevis.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› forum › hand-keykron-keyb...","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jan 9, 2026","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keykron's keykron launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web ...","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
4792791591185024322
|
2953216493346847855
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m......
|
72925
|
NULL
|
NULL
|
NULL
|
|
72927
|
2619
|
71
|
2026-05-26T17:45:36.205768+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817536205_m2.jpg...
|
Firefox
|
keychron launcher - Google Search — Personal
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...
How to use HE mode on Keychron Launcher
How to use HE mode on Keychron Launcher
Keychron
https://www.keychron.com
› pages › how-to-use-he-m...
About this result
Keychron HE keyboards
allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...
Launcher Tutorial YouTube · Keychron 51K+ followers
Launcher Tutorial
Launcher Tutorial
YouTube · Keychron
51K+ followers
About this result
Keychron. Playlist•1 video•719 views. Play all ... Introducing
Keychron Launcher
: Keymapping. Keychron.
People also search for
People also search for
Keychron Launcher download
Keychron Launcher
download
Keychron Launcher Firefox
Keychron Launcher
Firefox
Keychron launcher not connecting
Keychron launcher
not connecting
Keychron Launcher mouse
Keychron Launcher
mouse
Keychron Launcher offline
Keychron Launcher
offline
How to use Keychron Launcher
How to use
Keychron Launcher
Keychron Launcher Mac
Keychron Launcher
Mac
Keychron Launcher alternative
Keychron Launcher
alternative
Page navigation
Page navigation
1
Page 2
2
Page 3
3
Page 4...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"keychron launcher - Google Search","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"keychron launcher - Google Search","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.061170213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":2,"bounds":{"left":0.07795878,"top":0.101356745,"width":0.025598405,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":1,"bounds":{"left":0.07247341,"top":0.0981644,"width":0.03656915,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":2,"bounds":{"left":0.078125,"top":0.101356745,"width":0.025265958,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":4,"bounds":{"left":0.1015625,"top":0.08060654,"width":0.030585106,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"keychron launcher","depth":3,"bounds":{"left":0.15375665,"top":0.07342378,"width":0.17353724,"height":0.03990423},"on_screen":true,"value":"keychron launcher","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"keychron launcher","depth":4,"bounds":{"left":0.15375665,"top":0.08539505,"width":0.04454787,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":3,"bounds":{"left":0.32729387,"top":0.07342378,"width":0.015957447,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":3,"bounds":{"left":0.34491357,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":3,"bounds":{"left":0.35821143,"top":0.083798885,"width":0.013297873,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":3,"bounds":{"left":0.3728391,"top":0.07342378,"width":0.01462766,"height":0.03990423},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":3,"bounds":{"left":0.46409574,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":2,"bounds":{"left":0.4800532,"top":0.07741421,"width":0.013297873,"height":0.031923383},"on_screen":true,"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":5,"bounds":{"left":0.09757314,"top":0.12210695,"width":0.025930852,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Mode","depth":7,"bounds":{"left":0.1015625,"top":0.13647246,"width":0.017952127,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All","depth":5,"bounds":{"left":0.12350399,"top":0.12210695,"width":0.013464096,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":8,"bounds":{"left":0.12749335,"top":0.13647246,"width":0.005485372,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Images","depth":5,"bounds":{"left":0.13696809,"top":0.12210695,"width":0.023769947,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Images","depth":7,"bounds":{"left":0.14095744,"top":0.13647246,"width":0.015791224,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Videos","depth":5,"bounds":{"left":0.16073804,"top":0.12210695,"width":0.022772606,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Videos","depth":7,"bounds":{"left":0.16472739,"top":0.13647246,"width":0.014793883,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Short videos","depth":5,"bounds":{"left":0.18351063,"top":0.12210695,"width":0.035738032,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Short videos","depth":7,"bounds":{"left":0.1875,"top":0.13647246,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"News","depth":5,"bounds":{"left":0.21924867,"top":0.12210695,"width":0.019780586,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"News","depth":7,"bounds":{"left":0.22323804,"top":0.13647246,"width":0.011801862,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums","depth":5,"bounds":{"left":0.23902926,"top":0.12210695,"width":0.024268618,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":7,"bounds":{"left":0.24301861,"top":0.13647246,"width":0.016289894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More filters","depth":5,"bounds":{"left":0.2632979,"top":0.12210695,"width":0.025099734,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":8,"bounds":{"left":0.26728722,"top":0.13647246,"width":0.011136968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Search Results","depth":2,"bounds":{"left":0.06881649,"top":0.16041501,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search Results","depth":3,"bounds":{"left":0.06881649,"top":0.16041501,"width":0.03158245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":7,"bounds":{"left":0.1015625,"top":0.19832402,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":8,"bounds":{"left":0.1015625,"top":0.19752593,"width":0.03939495,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"keychron Launcher keychron Launcher http://launcher.keychron.com","depth":8,"bounds":{"left":0.1015625,"top":0.18994413,"width":0.064328454,"height":0.04030327},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"keychron Launcher","depth":9,"bounds":{"left":0.1015625,"top":0.21468475,"width":0.057347074,"height":0.024740623},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":10,"bounds":{"left":0.1015625,"top":0.21907422,"width":0.057347074,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keychron Launcher","depth":13,"bounds":{"left":0.11486037,"top":0.1859537,"width":0.03956117,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://launcher.keychron.com","depth":13,"bounds":{"left":0.11486037,"top":0.2019154,"width":0.051030584,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"bounds":{"left":0.16855054,"top":0.19872306,"width":0.00930851,"height":0.015961692},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"bounds":{"left":0.1015625,"top":0.2442139,"width":0.043716755,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...","depth":8,"bounds":{"left":0.1015625,"top":0.2442139,"width":0.21492687,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Videos","depth":7,"bounds":{"left":0.1015625,"top":0.3008779,"width":0.02244016,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Videos","depth":8,"bounds":{"left":0.1015625,"top":0.3008779,"width":0.02244016,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"bounds":{"left":0.12400266,"top":0.30327216,"width":0.017287234,"height":0.015961692},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":7,"bounds":{"left":0.15741356,"top":0.33758977,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago","depth":8,"bounds":{"left":0.15741356,"top":0.33758977,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron | With Keychron Custom Sound Effects, you can now ...","depth":11,"bounds":{"left":0.15741356,"top":0.33918595,"width":0.15508644,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instagram","depth":10,"bounds":{"left":0.15741356,"top":0.37110934,"width":0.020611702,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":10,"bounds":{"left":0.1810173,"top":0.37110934,"width":0.020944148,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 week ago","depth":10,"bounds":{"left":0.15741356,"top":0.3886672,"width":0.023769947,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"bounds":{"left":0.19996676,"top":0.36871508,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46","depth":7,"bounds":{"left":0.1015625,"top":0.33758977,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":8,"bounds":{"left":0.15741356,"top":0.4237829,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025","depth":9,"bounds":{"left":0.15741356,"top":0.4237829,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Customize your Keychron Keyboard with Keychron ...","depth":12,"bounds":{"left":0.15741356,"top":0.4253791,"width":0.1456117,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":11,"bounds":{"left":0.15741356,"top":0.45730248,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vasudev Menon","depth":11,"bounds":{"left":0.17852394,"top":0.45730248,"width":0.034574468,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 20, 2025","depth":11,"bounds":{"left":0.15741356,"top":0.47486034,"width":0.026595745,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"bounds":{"left":0.21110372,"top":0.45490822,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20","depth":8,"bounds":{"left":0.1015625,"top":0.4237829,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":8,"bounds":{"left":0.15741356,"top":0.509976,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024","depth":9,"bounds":{"left":0.15741356,"top":0.509976,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introducing Keychron Launcher: Keymapping","depth":12,"bounds":{"left":0.15741356,"top":0.51157224,"width":0.10837766,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":11,"bounds":{"left":0.15741356,"top":0.5434956,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":11,"bounds":{"left":0.17852394,"top":0.5434956,"width":0.020944148,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jul 11, 2024","depth":11,"bounds":{"left":0.15741356,"top":0.56105345,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"bounds":{"left":0.1974734,"top":0.54110134,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08","depth":8,"bounds":{"left":0.1015625,"top":0.509976,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"11 key moments in this video","depth":8,"bounds":{"left":0.1015625,"top":0.5857941,"width":0.10638298,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11 key moments in this video","depth":10,"bounds":{"left":0.1015625,"top":0.5913807,"width":0.06266622,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":8,"bounds":{"left":0.15741356,"top":0.6312849,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025","depth":9,"bounds":{"left":0.15741356,"top":0.6312849,"width":0.16090426,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application","depth":12,"bounds":{"left":0.15741356,"top":0.6328811,"width":0.1484375,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube","depth":11,"bounds":{"left":0.15741356,"top":0.66480446,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HardReset.Info","depth":11,"bounds":{"left":0.17852394,"top":0.66480446,"width":0.032579787,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Oct 21, 2025","depth":11,"bounds":{"left":0.15741356,"top":0.6823623,"width":0.026595745,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":9,"bounds":{"left":0.20910904,"top":0.6624102,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37","depth":8,"bounds":{"left":0.1015625,"top":0.6312849,"width":0.04920213,"height":0.06624102},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"9 key moments in this video","depth":8,"bounds":{"left":0.1015625,"top":0.70710295,"width":0.10638298,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9 key moments in this video","depth":10,"bounds":{"left":0.12483378,"top":0.7126895,"width":0.061668884,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all videos","depth":8,"bounds":{"left":0.14810506,"top":0.74541104,"width":0.12367021,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View all","depth":10,"bounds":{"left":0.19697474,"top":0.75418997,"width":0.01662234,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Discussions and forums","depth":7,"bounds":{"left":0.1015625,"top":0.80606544,"width":0.077792555,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Discussions and forums","depth":8,"bounds":{"left":0.1015625,"top":0.80606544,"width":0.077792555,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":10,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.20079787,"height":0.039106146},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":11,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.19365026,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":12,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.19365026,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time","depth":13,"bounds":{"left":0.1015625,"top":0.83798885,"width":0.19365026,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit","depth":13,"bounds":{"left":0.11087101,"top":0.8619314,"width":0.013796543,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":13,"bounds":{"left":0.124667555,"top":0.8619314,"width":0.0038231383,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"r/Keychron","depth":15,"bounds":{"left":0.12849069,"top":0.86352754,"width":0.019614361,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"bounds":{"left":0.14810506,"top":0.86352754,"width":0.0034906915,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30+ comments","depth":16,"bounds":{"left":0.15159574,"top":0.86352754,"width":0.026761968,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":15,"bounds":{"left":0.1783577,"top":0.86352754,"width":0.003656915,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8 months ago","depth":15,"bounds":{"left":0.18201463,"top":0.86352754,"width":0.024601065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":12,"bounds":{"left":0.124667555,"top":0.8619314,"width":0.0038231383,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"bounds":{"left":0.20661569,"top":0.8611333,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago","depth":8,"bounds":{"left":0.3023604,"top":0.84317636,"width":0.015957447,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":10,"bounds":{"left":0.1015625,"top":0.943336,"width":0.20079787,"height":0.039106146},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher does not work - Support","depth":11,"bounds":{"left":0.1015625,"top":0.943336,"width":0.10837766,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher does not work - Support","depth":12,"bounds":{"left":0.1015625,"top":0.943336,"width":0.10837766,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher does not work - Support","depth":13,"bounds":{"left":0.1015625,"top":0.943336,"width":0.10837766,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Manjaro Linux Forum","depth":13,"bounds":{"left":0.11087101,"top":0.96727854,"width":0.044714097,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":13,"bounds":{"left":0.15558511,"top":0.96727854,"width":0.003656915,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 months ago","depth":15,"bounds":{"left":0.15924202,"top":0.9688747,"width":0.024601065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":12,"bounds":{"left":0.15558511,"top":0.96727854,"width":0.003656915,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"bounds":{"left":0.18384309,"top":0.96648043,"width":0.017287234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago","depth":8,"bounds":{"left":0.3023604,"top":0.9485235,"width":0.015957447,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":10,"bounds":{"left":0.1015625,"top":1.0,"width":0.20079787,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":11,"bounds":{"left":0.1015625,"top":1.0,"width":0.16472739,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":12,"bounds":{"left":0.1015625,"top":1.0,"width":0.16472739,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron keyboard configuration & firmware upates via launcher. ...","depth":13,"bounds":{"left":0.1015625,"top":1.0,"width":0.16472739,"height":-0.0023941994},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EndeavourOS Forum","depth":13,"bounds":{"left":0.11087101,"top":1.0,"width":0.044215426,"height":-0.02633679},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":13,"bounds":{"left":0.15508644,"top":1.0,"width":0.003656915,"height":-0.02633679},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 answers","depth":15,"bounds":{"left":0.15874335,"top":1.0,"width":0.018450798,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":16,"bounds":{"left":0.17719415,"top":1.0,"width":0.003656915,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 months ago","depth":16,"bounds":{"left":0.18085106,"top":1.0,"width":0.024601065,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":12,"bounds":{"left":0.15508644,"top":1.0,"width":0.003656915,"height":-0.02633679},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":11,"bounds":{"left":0.20545213,"top":1.0,"width":0.017287234,"height":-0.025538683},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago","depth":8,"bounds":{"left":0.3023604,"top":1.0,"width":0.015957447,"height":-0.00758183},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"See more discussions","depth":8,"bounds":{"left":0.14810506,"top":1.0,"width":0.12367021,"height":-0.051077366},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"See more","depth":10,"bounds":{"left":0.19498006,"top":1.0,"width":0.020611702,"height":-0.059856296},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web results","depth":7,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web results","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Advantages of the Keychron Launcher Web App","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advantages of the Keychron Launcher Web App","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › archived › advant...","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keychron Launcher web app https://launcher.keychron.com","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher web app https://launcher.keychron.com","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reddit · r/Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20+ comments · 2 years ago","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"I recently was in touch with Keychron support, and they pointed me at","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://launcher.keychron.com","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to configure my keyboard. This was new to me.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Is the Launcher web app the only way to configure the ...","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Is the","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web app the only way to configure the ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47 posts","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dec 20, 2024","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Anyone tried Launcher today? The new layout is one ...","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone tried","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"today? The new layout is one ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"35 posts","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sep 17, 2025","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"More results from www.reddit.com","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More results from www.reddit.com","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How To Use Launcher To Program Your Keyboard","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How To Use Launcher To Program Your Keyboard","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› blogs › news › how-to-us...","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"My keyboard is not recognized by Keychron Launcher, what ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Zendesk","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://keychronsupport.zendesk.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› en-us › articles","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jul 4, 2025","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure you have used the latest Chrome, Edge, or Opera browser version","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". 2. Ensure your keyboard is in a wired connection.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"a hand with keykron keyboards and remapping keys via ...","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"a hand with keykron keyboards and remapping keys via ...","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AppleVis","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.applevis.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› forum › hand-keykron-keyb...","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jan 9, 2026","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"keykron's keykron launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"web ...","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"How to use HE mode on Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How to use HE mode on Keychron Launcher","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://www.keychron.com","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"› pages › how-to-use-he-m...","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron HE keyboards","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Launcher Tutorial YouTube · Keychron 51K+ followers","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Launcher Tutorial","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Launcher Tutorial","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YouTube · Keychron","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"51K+ followers","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":8,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron. Playlist•1 video•719 views. Play all ... Introducing","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": Keymapping. Keychron.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"People also search for","depth":6,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"People also search for","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher download","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"download","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher Firefox","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron launcher not connecting","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"not connecting","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher mouse","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mouse","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher offline","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"offline","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"How to use Keychron Launcher","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher Mac","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mac","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Keychron Launcher alternative","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keychron Launcher","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"alternative","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Page navigation","depth":6,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Page navigation","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 2","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 3","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Page 4","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8027140348912729126
|
-6270157742543831953
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
keychron launcher - Google Search
keychron launcher - Google Search
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Go to Google Home
keychron launcher
keychron launcher
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Videos
Videos
Short videos
Short videos
News
News
Forums
Forums
More filters
More
Search Results
Search Results
Web results
Web results
keychron Launcher keychron Launcher http://launcher.keychron.com
keychron Launcher
keychron Launcher
keychron Launcher
http://launcher.keychron.com
About this result
Keychron Launcher
can give you endless possibilities for key remapping, macros, shortcuts, and more. Now you can easily customize each key with the Keychron ...
Videos
Videos
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ... Instagram Keychron 1 week ago
Keychron | With Keychron Custom Sound Effects, you can now ...
Instagram
Keychron
1 week ago
About this result
Keychron | With Keychron Custom Sound Effects, you can now ... by Keychron on Instagram. Play on Instagram. 0:46
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ... YouTube Vasudev Menon Apr 20, 2025
How To Customize your Keychron Keyboard with Keychron ...
YouTube
Vasudev Menon
Apr 20, 2025
About this result
How To Customize your Keychron Keyboard with Keychron ... by Vasudev Menon on YouTube. Play on Google. 7:20
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping YouTube Keychron Jul 11, 2024
Introducing Keychron Launcher: Keymapping
YouTube
Keychron
Jul 11, 2024
About this result
Introducing Keychron Launcher: Keymapping by Keychron on YouTube. Play on Google. 4:08
11 key moments in this video
11 key moments in this video
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application YouTube HardReset.Info Oct 21, 2025
KEYCHRON K2 QMK – How to Manage Quick Start Application
YouTube
HardReset.Info
Oct 21, 2025
About this result
KEYCHRON K2 QMK – How to Manage Quick Start Application by HardReset.Info on YouTube. Play on Google. 1:37
9 key moments in this video
9 key moments in this video
View all videos
View all
Discussions and forums
Discussions and forums
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Anyone tried Launcher today? The new layout is one of the decisions of all time
Reddit
·
r/Keychron
·
30+ comments
·
8 months ago
·
About this result
Anyone tried Launcher today? The new layout is one of the decisions of all time Reddit · r/Keychron · 30+ comments · 8 months ago
10 votes, 35 comments. I can't post pictures in this sub, but Keychron Launcher has been redesigned, apparently. All the features appear to ... More
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Keychron Launcher does not work - Support
Manjaro Linux Forum
·
5 months ago
·
About this result
Keychron Launcher does not work - Support Manjaro Linux Forum · 5 months ago
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
Keychron keyboard configuration & firmware upates via launcher. ...
EndeavourOS Forum
·
5 answers
·
7 months ago
·
About this result
Keychron keyboard configuration & firmware upates via launcher. ... EndeavourOS Forum · 5 answers · 7 months ago
See more discussions
See more
Web results
Web results
Advantages of the Keychron Launcher Web App Keychron https://www.keychron.com › blogs › archived › advant...
Advantages of the Keychron Launcher Web App
Advantages of the Keychron Launcher Web App
Keychron
https://www.keychron.com
› blogs › archived › advant...
About this result
Keychron Launcher
serves as an essential companion for mechanical keyboard users, providing a range of features that enhance convenience and security.
Keychron Launcher web app https://launcher.keychron.com Reddit · r/Keychron 20+ comments · 2 years ago
Keychron Launcher web app https://launcher.keychron.com
Keychron Launcher web app https://launcher.keychron.com
Reddit · r/Keychron
20+ comments · 2 years ago
About this result
I recently was in touch with Keychron support, and they pointed me at
https://launcher.keychron.com
to configure my keyboard. This was new to me.
Is the Launcher web app the only way to configure the ...
Is the
Launcher
web app the only way to configure the ...
47 posts
Dec 20, 2024
Anyone tried Launcher today? The new layout is one ...
Anyone tried
Launcher
today? The new layout is one ...
35 posts
Sep 17, 2025
More results from www.reddit.com
More results from www.reddit.com
How To Use Launcher To Program Your Keyboard Keychron https://www.keychron.com › blogs › news › how-to-us...
How To Use Launcher To Program Your Keyboard
How To Use Launcher To Program Your Keyboard
Keychron
https://www.keychron.com
› blogs › news › how-to-us...
About this result
Keychron Launcher
is a free web app that allows you to customize and personalize your Keychron keyboards and mice. Its features include, but are not limited to, ...
My keyboard is not recognized by Keychron Launcher, what ... Zendesk https://keychronsupport.zendesk.com › en-us › articles
My keyboard is not recognized by Keychron Launcher, what ...
My keyboard is not recognized by Keychron Launcher, what ...
Zendesk
https://keychronsupport.zendesk.com
› en-us › articles
About this result
Jul 4, 2025
—
1.
Ensure you have used the latest Chrome, Edge, or Opera browser version
. 2. Ensure your keyboard is in a wired connection.
a hand with keykron keyboards and remapping keys via ... AppleVis https://www.applevis.com › forum › hand-keykron-keyb...
a hand with keykron keyboards and remapping keys via ...
a hand with keykron keyboards and remapping keys via ...
AppleVis
https://www.applevis.com
› forum › hand-keykron-keyb...
About this result
Jan 9, 2026
—
The point is, I want to remap those keys into pause and play, mute, and volume up and Down. Can this be done via
keykron's keykron launcher
web ...
How to use HE mode on Keychron Launcher Keychron https://www.keychron.com › pages › how-to-use-he-m...
How to use HE mode on Keychron Launcher
How to use HE mode on Keychron Launcher
Keychron
https://www.keychron.com
› pages › how-to-use-he-m...
About this result
Keychron HE keyboards
allow users to freely customize magnetic switch functions according to their habits, including Actuation Distance, Rapid Trigger, Snap ...
Launcher Tutorial YouTube · Keychron 51K+ followers
Launcher Tutorial
Launcher Tutorial
YouTube · Keychron
51K+ followers
About this result
Keychron. Playlist•1 video•719 views. Play all ... Introducing
Keychron Launcher
: Keymapping. Keychron.
People also search for
People also search for
Keychron Launcher download
Keychron Launcher
download
Keychron Launcher Firefox
Keychron Launcher
Firefox
Keychron launcher not connecting
Keychron launcher
not connecting
Keychron Launcher mouse
Keychron Launcher
mouse
Keychron Launcher offline
Keychron Launcher
offline
How to use Keychron Launcher
How to use
Keychron Launcher
Keychron Launcher Mac
Keychron Launcher
Mac
Keychron Launcher alternative
Keychron Launcher
alternative
Page navigation
Page navigation
1
Page 2
2
Page 3
3
Page 4...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72926
|
2619
|
70
|
2026-05-26T17:45:29.838894+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817529838_m2.jpg...
|
Firefox
|
Personal — Mozilla Firefox
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.074221864,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.08539505,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.10694334,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.11811652,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.11412609,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.1396648,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.15083799,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.14684756,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.17398244,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mozilla Firefox","depth":3,"bounds":{"left":0.14295213,"top":0.20989625,"width":0.28291222,"height":0.075019956},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Search with Google or enter address","depth":3,"bounds":{"left":0.14295213,"top":0.29409418,"width":0.28291222,"height":0.0415004},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search with Google or enter address","depth":5,"bounds":{"left":0.15940824,"top":0.30726257,"width":0.08344415,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"bounds":{"left":0.17154256,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":8,"bounds":{"left":0.17170878,"top":0.43415803,"width":0.024601065,"height":0.051077414},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"bounds":{"left":0.18783244,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Location Logger","depth":6,"bounds":{"left":0.2002992,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":8,"bounds":{"left":0.20412233,"top":0.43415803,"width":0.017121011,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Location Logger","depth":6,"bounds":{"left":0.2165891,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"(195) YouTube","depth":6,"bounds":{"left":0.22888963,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(195) YouTube","depth":8,"bounds":{"left":0.23287898,"top":0.43415803,"width":0.017121011,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for (195) YouTube","depth":6,"bounds":{"left":0.24517952,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.25764626,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":8,"bounds":{"left":0.2578125,"top":0.43415803,"width":0.02443484,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.27393618,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe — Archive","depth":6,"bounds":{"left":0.2862367,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":8,"bounds":{"left":0.28740028,"top":0.43415803,"width":0.022772606,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Screenpipe — Archive","depth":6,"bounds":{"left":0.3025266,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Photos - Google Photos","depth":6,"bounds":{"left":0.31499335,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":8,"bounds":{"left":0.31881648,"top":0.43415803,"width":0.017287234,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Photos - Google Photos","depth":6,"bounds":{"left":0.33128324,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude","depth":6,"bounds":{"left":0.34358376,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":8,"bounds":{"left":0.34906915,"top":0.43415803,"width":0.013962766,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Claude","depth":6,"bounds":{"left":0.35987368,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"authentik","depth":6,"bounds":{"left":0.3723404,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"authentik","depth":8,"bounds":{"left":0.37533244,"top":0.43415803,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for authentik","depth":6,"bounds":{"left":0.38863033,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":4,"bounds":{"left":0.48188165,"top":0.9565044,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":7,"bounds":{"left":0.48487368,"top":0.96209097,"width":0.025265958,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8761272817118293531
|
-4800668713220676009
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
72924
|
NULL
|
NULL
|
NULL
|
|
72925
|
2618
|
65
|
2026-05-26T17:45:29.737336+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817529737_m1.jpg...
|
Firefox
|
Personal — Mozilla Firefox
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mozilla Firefox","depth":3,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Search with Google or enter address","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search with Google or enter address","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Location Logger","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Location Logger","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"(195) YouTube","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(195) YouTube","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for (195) YouTube","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"DXP4800PLUS-B5F8","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for DXP4800PLUS-B5F8","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe — Archive","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Screenpipe — Archive","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Photos - Google Photos","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Photos - Google Photos","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Claude","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"authentik","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"authentik","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for authentik","depth":6,"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":4,"bounds":{"left":0.4420139,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":7,"bounds":{"left":0.44826388,"top":0.0,"width":0.05277778,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8761272817118293531
|
-4800668713220676009
|
typing_pause
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
New Tab
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72924
|
2619
|
69
|
2026-05-26T17:45:28.157495+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817528157_m2.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.118914604,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mozilla Firefox","depth":3,"bounds":{"left":0.14295213,"top":0.20989625,"width":0.28291222,"height":0.075019956},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Search with Google or enter address","depth":3,"bounds":{"left":0.14295213,"top":0.29409418,"width":0.28291222,"height":0.0415004},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search with Google or enter address","depth":5,"bounds":{"left":0.15940824,"top":0.30726257,"width":0.08344415,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"bounds":{"left":0.17154256,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":8,"bounds":{"left":0.17170878,"top":0.43415803,"width":0.024601065,"height":0.051077414},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Inbox - kovaliklukas@gmail.com - Gmail","depth":6,"bounds":{"left":0.18783244,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Location Logger","depth":6,"bounds":{"left":0.2002992,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":8,"bounds":{"left":0.20412233,"top":0.43415803,"width":0.017121011,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Location Logger","depth":6,"bounds":{"left":0.2165891,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"(195) YouTube","depth":6,"bounds":{"left":0.22888963,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(195) YouTube","depth":8,"bounds":{"left":0.23287898,"top":0.43415803,"width":0.017121011,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for (195) YouTube","depth":6,"bounds":{"left":0.24517952,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.25764626,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":8,"bounds":{"left":0.2578125,"top":0.43415803,"width":0.02443484,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.27393618,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe — Archive","depth":6,"bounds":{"left":0.2862367,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":8,"bounds":{"left":0.28740028,"top":0.43415803,"width":0.022772606,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Screenpipe — Archive","depth":6,"bounds":{"left":0.3025266,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Photos - Google Photos","depth":6,"bounds":{"left":0.31499335,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":8,"bounds":{"left":0.31881648,"top":0.43415803,"width":0.017287234,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Photos - Google Photos","depth":6,"bounds":{"left":0.33128324,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude","depth":6,"bounds":{"left":0.34358376,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":8,"bounds":{"left":0.34906915,"top":0.43415803,"width":0.013962766,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Claude","depth":6,"bounds":{"left":0.35987368,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"authentik","depth":6,"bounds":{"left":0.3723404,"top":0.36831605,"width":0.024933511,"height":0.091380686},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"authentik","depth":8,"bounds":{"left":0.37533244,"top":0.43415803,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for authentik","depth":6,"bounds":{"left":0.38863033,"top":0.3699122,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":4,"bounds":{"left":0.48188165,"top":0.9565044,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":7,"bounds":{"left":0.48487368,"top":0.96209097,"width":0.025265958,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-3051116434803499294
|
-4764657508370979242
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
Location Logger
Location Logger
Open context menu for Location Logger
(195) YouTube
(195) YouTube
Open context menu for (195) YouTube
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Open context menu for DXP4800PLUS-B5F8
Screenpipe — Archive
Screenpipe — Archive
Open context menu for Screenpipe — Archive
Photos - Google Photos
Photos - Google Photos
Open context menu for Photos - Google Photos
Claude
Claude
Open context menu for Claude
authentik
authentik
Open context menu for authentik
Customize
Customize...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72923
|
2618
|
64
|
2026-05-26T17:45:28.052498+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817528052_m1.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.078125,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.07986111,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.08055556,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.081597224,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.0,"top":0.0055555557,"width":0.07951389,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.12708333,"top":0.0055555557,"width":0.08055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.006666667,"width":0.014930556,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
6727404030204794262
|
-7160207196987952830
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m...
|
72920
|
NULL
|
NULL
|
NULL
|
|
72922
|
2619
|
68
|
2026-05-26T17:45:26.931740+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817526931_m2.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
http://192.168.0.242:8007/ui
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238
112
2,316
11
5,925
4,370
201
3,739
VS GOAL (8 000)
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Close
Low
Low
Low
❤️ Heart Rate (daily min / avg / max)
DATE
MIN
AVG
MAX
2026-05-25
54
66.7
102
2026-05-24
48
68.5
115
2026-05-23
52
73.5
112
2026-05-22
53
74.1
119
2026-05-21
47
71.1
119
2026-05-20
49
73.2
126
2026-05-19
46
55.5
96
2026-05-18
47
65.8
118
2026-05-17
43
59.8
110
2026-05-16...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.032413565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.05651596,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.118914604,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.2571476,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"bounds":{"left":0.07679521,"top":0.06624102,"width":0.06482713,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"bounds":{"left":0.33926198,"top":0.070231445,"width":0.010139627,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.35804522,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.3643617,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"bounds":{"left":0.36818483,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.37450132,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.37832448,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.39045876,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"bounds":{"left":0.40458778,"top":0.070231445,"width":0.004654255,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"bounds":{"left":0.41788563,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.4242021,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"bounds":{"left":0.42802528,"top":0.0698324,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"bounds":{"left":0.43434176,"top":0.0698324,"width":0.0028257978,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"bounds":{"left":0.4381649,"top":0.0698324,"width":0.010804521,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"bounds":{"left":0.4502992,"top":0.07063048,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"bounds":{"left":0.4644282,"top":0.06464485,"width":0.027593086,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"bounds":{"left":0.08344415,"top":0.13447726,"width":0.023105053,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"bounds":{"left":0.08344415,"top":0.15043895,"width":0.03158245,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"bounds":{"left":0.15359043,"top":0.13447726,"width":0.025265958,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"bounds":{"left":0.15359043,"top":0.15043895,"width":0.03125,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"bounds":{"left":0.2237367,"top":0.13447726,"width":0.0234375,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"bounds":{"left":0.2237367,"top":0.15043895,"width":0.025764627,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"bounds":{"left":0.29371676,"top":0.13447726,"width":0.035405584,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"bounds":{"left":0.29371676,"top":0.15043895,"width":0.02543218,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"bounds":{"left":0.36386302,"top":0.13447726,"width":0.035738032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"bounds":{"left":0.36386302,"top":0.15043895,"width":0.03274601,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"bounds":{"left":0.4340093,"top":0.13447726,"width":0.021775266,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"bounds":{"left":0.4340093,"top":0.15043895,"width":0.03307846,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"bounds":{"left":0.08344415,"top":0.22146848,"width":0.040226065,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"bounds":{"left":0.082446806,"top":0.4632881,"width":0.010638298,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"bounds":{"left":0.15890957,"top":0.4632881,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"bounds":{"left":0.22706117,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"bounds":{"left":0.33111703,"top":0.4632881,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"bounds":{"left":0.43600398,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"bounds":{"left":0.082446806,"top":0.49002394,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.49002394,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"bounds":{"left":0.22706117,"top":0.49002394,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"bounds":{"left":0.33111703,"top":0.49002394,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.49082202,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"bounds":{"left":0.082446806,"top":0.51835597,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.51835597,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"bounds":{"left":0.22706117,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"bounds":{"left":0.33111703,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.519154,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"bounds":{"left":0.082446806,"top":0.547087,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"bounds":{"left":0.15890957,"top":0.547087,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"bounds":{"left":0.22706117,"top":0.547087,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"bounds":{"left":0.33111703,"top":0.547087,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.54788506,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"bounds":{"left":0.082446806,"top":0.575419,"width":0.025265958,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"bounds":{"left":0.15890957,"top":0.575419,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"bounds":{"left":0.22706117,"top":0.575419,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"bounds":{"left":0.33111703,"top":0.575419,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.57621706,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"bounds":{"left":0.082446806,"top":0.60415006,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"bounds":{"left":0.15890957,"top":0.60415006,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.60415006,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"bounds":{"left":0.33111703,"top":0.60415006,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6049481,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"bounds":{"left":0.082446806,"top":0.6328811,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"bounds":{"left":0.15890957,"top":0.6328811,"width":0.013796543,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"bounds":{"left":0.22706117,"top":0.6328811,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"bounds":{"left":0.33111703,"top":0.6328811,"width":0.038896278,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.63367915,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"bounds":{"left":0.082446806,"top":0.6612131,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"bounds":{"left":0.15890957,"top":0.6612131,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.6612131,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"bounds":{"left":0.33111703,"top":0.6612131,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.66201115,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"bounds":{"left":0.082446806,"top":0.68994415,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"bounds":{"left":0.15890957,"top":0.68994415,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"bounds":{"left":0.22706117,"top":0.68994415,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"bounds":{"left":0.33111703,"top":0.68994415,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6907422,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"bounds":{"left":0.082446806,"top":0.71827614,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"bounds":{"left":0.15890957,"top":0.71827614,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"bounds":{"left":0.22706117,"top":0.71827614,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"bounds":{"left":0.33111703,"top":0.71827614,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.71907425,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"bounds":{"left":0.082446806,"top":0.7470072,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.7470072,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"bounds":{"left":0.22706117,"top":0.7470072,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"bounds":{"left":0.33111703,"top":0.7470072,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.74780524,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"bounds":{"left":0.082446806,"top":0.77573824,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"bounds":{"left":0.15890957,"top":0.77573824,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"bounds":{"left":0.22706117,"top":0.77573824,"width":0.03656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"bounds":{"left":0.33111703,"top":0.77573824,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.7765363,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"bounds":{"left":0.082446806,"top":0.80407023,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.80407023,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"bounds":{"left":0.22706117,"top":0.80407023,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"bounds":{"left":0.33111703,"top":0.80407023,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.80486834,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"bounds":{"left":0.082446806,"top":0.8328013,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.8328013,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"bounds":{"left":0.22706117,"top":0.8328013,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"bounds":{"left":0.33111703,"top":0.8328013,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.8335994,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"bounds":{"left":0.082446806,"top":0.8611333,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.8611333,"width":0.013131649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"bounds":{"left":0.22706117,"top":0.8611333,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"bounds":{"left":0.33111703,"top":0.8611333,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.8619314,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"bounds":{"left":0.082446806,"top":0.8898643,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.8898643,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"bounds":{"left":0.22706117,"top":0.8898643,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"bounds":{"left":0.33111703,"top":0.8898643,"width":0.03756649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.89066243,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"bounds":{"left":0.082446806,"top":0.9185954,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.9185954,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"bounds":{"left":0.22706117,"top":0.9185954,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"bounds":{"left":0.33111703,"top":0.9185954,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.9193935,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"bounds":{"left":0.082446806,"top":0.94692737,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.94692737,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.22706117,"top":0.94692737,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.33111703,"top":0.94692737,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9477255,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"bounds":{"left":0.082446806,"top":0.9756584,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.9756584,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.22706117,"top":0.9756584,"width":0.03856383,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.33111703,"top":0.9756584,"width":0.0390625,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9764565,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"bounds":{"left":0.082446806,"top":1.0,"width":0.025265958,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"bounds":{"left":0.15890957,"top":1.0,"width":0.015957447,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.22706117,"top":1.0,"width":0.038065158,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.33111703,"top":1.0,"width":0.03856383,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":1.0,"width":0.0071476065,"height":-0.004788518},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"bounds":{"left":0.082446806,"top":0.4632881,"width":0.010638298,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"bounds":{"left":0.082446806,"top":0.49002394,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"bounds":{"left":0.082446806,"top":0.51835597,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"bounds":{"left":0.082446806,"top":0.547087,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"bounds":{"left":0.082446806,"top":0.575419,"width":0.025265958,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"bounds":{"left":0.082446806,"top":0.60415006,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"bounds":{"left":0.082446806,"top":0.6328811,"width":0.02543218,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"bounds":{"left":0.082446806,"top":0.6612131,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"bounds":{"left":0.082446806,"top":0.68994415,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"bounds":{"left":0.082446806,"top":0.71827614,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"bounds":{"left":0.082446806,"top":0.7470072,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"bounds":{"left":0.082446806,"top":0.77573824,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"bounds":{"left":0.082446806,"top":0.80407023,"width":0.024933511,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"bounds":{"left":0.082446806,"top":0.8328013,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"bounds":{"left":0.082446806,"top":0.8611333,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"bounds":{"left":0.082446806,"top":0.8898643,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"bounds":{"left":0.082446806,"top":0.9185954,"width":0.024767287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"bounds":{"left":0.082446806,"top":0.94692737,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"bounds":{"left":0.082446806,"top":0.9756584,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"bounds":{"left":0.082446806,"top":1.0,"width":0.025265958,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"bounds":{"left":0.15890957,"top":0.4632881,"width":0.021609042,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.49002394,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"bounds":{"left":0.15890957,"top":0.51835597,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"bounds":{"left":0.15890957,"top":0.547087,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"bounds":{"left":0.15890957,"top":0.575419,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"bounds":{"left":0.15890957,"top":0.60415006,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"bounds":{"left":0.15890957,"top":0.6328811,"width":0.013796543,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"bounds":{"left":0.15890957,"top":0.6612131,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"bounds":{"left":0.15890957,"top":0.68994415,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"bounds":{"left":0.15890957,"top":0.71827614,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.7470072,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"bounds":{"left":0.15890957,"top":0.77573824,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.80407023,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.8328013,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"bounds":{"left":0.15890957,"top":0.8611333,"width":0.013131649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.8898643,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"bounds":{"left":0.15890957,"top":0.9185954,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"bounds":{"left":0.15890957,"top":0.94692737,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"bounds":{"left":0.15890957,"top":0.9756584,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"bounds":{"left":0.15890957,"top":1.0,"width":0.015957447,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"bounds":{"left":0.22706117,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"bounds":{"left":0.22706117,"top":0.49002394,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"bounds":{"left":0.22706117,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"bounds":{"left":0.22706117,"top":0.547087,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"bounds":{"left":0.22706117,"top":0.575419,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.60415006,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"bounds":{"left":0.22706117,"top":0.6328811,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"bounds":{"left":0.22706117,"top":0.6612131,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"bounds":{"left":0.22706117,"top":0.68994415,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"bounds":{"left":0.22706117,"top":0.71827614,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"bounds":{"left":0.22706117,"top":0.7470072,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"bounds":{"left":0.22706117,"top":0.77573824,"width":0.03656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"bounds":{"left":0.22706117,"top":0.80407023,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"bounds":{"left":0.22706117,"top":0.8328013,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"bounds":{"left":0.22706117,"top":0.8611333,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"bounds":{"left":0.22706117,"top":0.8898643,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"bounds":{"left":0.22706117,"top":0.9185954,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.22706117,"top":0.94692737,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.22706117,"top":0.9756584,"width":0.03856383,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.22706117,"top":1.0,"width":0.038065158,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"bounds":{"left":0.33111703,"top":0.4632881,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"bounds":{"left":0.33111703,"top":0.49002394,"width":0.037400264,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"bounds":{"left":0.33111703,"top":0.51835597,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"bounds":{"left":0.33111703,"top":0.547087,"width":0.03873005,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"bounds":{"left":0.33111703,"top":0.575419,"width":0.037898935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"bounds":{"left":0.33111703,"top":0.60415006,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"bounds":{"left":0.33111703,"top":0.6328811,"width":0.038896278,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"bounds":{"left":0.33111703,"top":0.6612131,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"bounds":{"left":0.33111703,"top":0.68994415,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"bounds":{"left":0.33111703,"top":0.71827614,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"bounds":{"left":0.33111703,"top":0.7470072,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"bounds":{"left":0.33111703,"top":0.77573824,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"bounds":{"left":0.33111703,"top":0.80407023,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"bounds":{"left":0.33111703,"top":0.8328013,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"bounds":{"left":0.33111703,"top":0.8611333,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"bounds":{"left":0.33111703,"top":0.8898643,"width":0.03756649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"bounds":{"left":0.33111703,"top":0.9185954,"width":0.03723404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.33111703,"top":0.94692737,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.33111703,"top":0.9756584,"width":0.0390625,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.33111703,"top":1.0,"width":0.03856383,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"bounds":{"left":0.43600398,"top":0.4632881,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.49082202,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.519154,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.54788506,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.57621706,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6049481,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.63367915,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.66201115,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.6907422,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.71907425,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.74780524,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.7765363,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.80486834,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"bounds":{"left":0.43866357,"top":0.8335994,"width":0.010472074,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.8619314,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.89066243,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"bounds":{"left":0.43866357,"top":0.9193935,"width":0.010139627,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9477255,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":0.9764565,"width":0.0071476065,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.43866357,"top":1.0,"width":0.0071476065,"height":-0.004788518},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"👟 Daily Steps","depth":2,"bounds":{"left":0.08344415,"top":1.0,"width":0.032247342,"height":-0.05666399},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,316","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,370","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"201","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,739","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,316","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,370","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"201","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,739","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"❤️ Heart Rate (daily min / avg / max)","depth":2,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MIN","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MAX","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"54","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66.7","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"102","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"48","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"68.5","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"115","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"52","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"73.5","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"53","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"74.1","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"119","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"71.1","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"119","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"49","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"73.2","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"126","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"46","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"55.5","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"96","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65.8","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"118","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"59.8","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"110","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-2733053616329329351
|
-4822101853703064216
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238
112
2,316
11
5,925
4,370
201
3,739
VS GOAL (8 000)
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Close
Low
Low
Low
❤️ Heart Rate (daily min / avg / max)
DATE
MIN
AVG
MAX
2026-05-25
54
66.7
102
2026-05-24
48
68.5
115
2026-05-23
52
73.5
112
2026-05-22
53
74.1
119
2026-05-21
47
71.1
119
2026-05-20
49
73.2
126
2026-05-19
46
55.5
96
2026-05-18
47
65.8
118
2026-05-17
43
59.8
110
2026-05-16...
|
72921
|
NULL
|
NULL
|
NULL
|
|
72921
|
2619
|
67
|
2026-05-26T17:45:25.106721+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817525106_m2.jpg...
|
Code
|
Review project and plan … — garmin-connector [SSH: Review project and plan … — garmin-connector [SSH: nas]...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the
Sleep
table only stores
start
,
end
,
duration_minutes
. It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.
sleep_processing.py
already parses all of this.
8.
HeartRate
rows volume
Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.
Code Quality
Code Quality
9. Session management is fragile
main.py:35-44
main.py:35-44
—
get_client()
re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on
401
errors.
10.
demo.py
depends on
readchar
not in
requirements.txt
requirements.txt
requirements.txt
—
demo.py
imports
readchar
which isn't listed, so
pip install -r requirements.txt
won't cover it. Either add it or keep a separate
requirements-dev.txt
.
Summary:
The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in
sleep_processing.py
for richer data, and (4) add a backfill endpoint for historical data.
Message actions
.env
.env
is there some UI. what is the database and what data are stored?
Thinking
Thinking
Bash
Check if garmin containers are running
IN
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check all garmin containers including stopped ones
IN
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
List all Docker containers
IN
docker ps -a 2>/dev/null | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check Docker availability
IN
docker info 2>&1 | head -5
Copy code to clipboard
OUT
Client: Docker Engine - Community
Version: 26.1.0
Context: default
Debug Mode: false
Plugins:
Bash
List all containers with names and status
IN
docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
Bash
List Docker contexts
IN...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":11,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":11,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":11,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":11,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":11,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":11,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":14,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":11,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":11,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":9,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":10,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: garmin-connector [SSH: nas]","depth":13,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: garmin-connector [SSH: nas]","depth":14,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.06349734,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"GARMIN-CONNECTOR [SSH: NAS]","depth":15,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.06349734,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":26,"bounds":{"left":0.025265958,"top":0.07980846,"width":0.060837764,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":19,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"examples","depth":19,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.02825798,"top":0.11412609,"width":0.016954787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1292897,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":19,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.13168396,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.14684756,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":19,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":19,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":19,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.18435754,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":19,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2019154,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.02925532,"top":0.2019154,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":19,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.21947326,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029587766,"top":0.21947326,"width":0.012300532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"models.py","depth":19,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.23703113,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.029587766,"top":0.23703113,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"python-garminconnect-testing.md","depth":19,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.06948138,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":30,"bounds":{"left":0.028590426,"top":0.254589,"width":0.066821806,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":19,"bounds":{"left":0.025930852,"top":0.27134877,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":19,"bounds":{"left":0.025930852,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2897047,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.027593086,"top":0.2897047,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":19,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.04155585,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.02825798,"top":0.30726257,"width":0.039228722,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ui.html","depth":19,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.010970744,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":14,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":15,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":14,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":15,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":".env, preview, Editor Group 1","depth":20,"bounds":{"left":0.10638298,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.109707445,"top":0.05347167,"width":0.0063164895,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.118351065,"top":0.05586592,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.11170213,"top":0.07661612,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":22,"bounds":{"left":0.119015954,"top":0.07821229,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.119015954,"top":0.079010375,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.12034574,"top":0.079010375,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXTextArea","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":20,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.014365523},"on_screen":true,"value":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":21,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":36,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.084109046,"height":0.025538707}},{"char_start":37,"char_count":35,"bounds":{"left":0.1306516,"top":0.10933759,"width":0.07945479,"height":0.011173184}},{"char_start":72,"char_count":1,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.0023271276,"height":0.011173184}},{"char_start":73,"char_count":21,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.048204787,"height":0.025538707}},{"char_start":94,"char_count":33,"bounds":{"left":0.12832446,"top":0.15243416,"width":0.07679521,"height":0.025538707}},{"char_start":127,"char_count":22,"bounds":{"left":0.12832446,"top":0.16679968,"width":0.050531916,"height":0.025538707}},{"char_start":149,"char_count":17,"bounds":{"left":0.12832446,"top":0.1811652,"width":0.03856383,"height":0.025538707}},{"char_start":166,"char_count":17,"bounds":{"left":0.1306516,"top":0.19553073,"width":0.04089096,"height":0.011173184}}],"role_description":"text"},{"role":"AXRadioButton","text":"Review project and plan …, Editor Group 2","depth":20,"bounds":{"left":0.55352396,"top":0.047885075,"width":0.0731383,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Review project and plan …","depth":23,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.05285904,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":24,"bounds":{"left":0.5668218,"top":0.05586592,"width":0.050199468,"height":0.011971269}}],"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":14,"bounds":{"left":0.109042555,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":16,"bounds":{"left":0.11303192,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":14,"bounds":{"left":0.13663563,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":16,"bounds":{"left":0.140625,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":14,"bounds":{"left":0.15990691,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":16,"bounds":{"left":0.16389628,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":14,"bounds":{"left":0.19946809,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":16,"bounds":{"left":0.20345744,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.20378989,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.20611702,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":14,"bounds":{"left":0.22606383,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":16,"bounds":{"left":0.23005319,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal 5, bash Use ⌥F1 for terminal accessibility help","depth":28,"bounds":{"left":0.24567819,"top":0.97126895,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.107380316,"top":0.97047085,"width":0.005319149,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal input","depth":29,"bounds":{"left":0.4225399,"top":0.7573823,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":8,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":9,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":8,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":8,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":8,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot status","depth":8,"bounds":{"left":0.9790558,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Command Succeeded","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Review project and plan improvements","depth":2,"bounds":{"left":0.55585104,"top":0.08060654,"width":0.09075798,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":2,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":2,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"demo.py","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the project structure first.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all files in garmin-connector project","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/garmin-connector -type f | sort","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/garmin-connector/db.py\n/volume2/docker/garmin-connector/demo.py\n/volume2/docker/garmin-connector/docker-compose.yml\n/volume2/docker/garmin-connector/Dockerfile\n/volume2/docker/garmin-connector/.env\n/volume2/docker/garmin-connector/examples/sleep_data_example.json\n/volume2/docker/garmin-connector/main.py\n/volume2/docker/garmin-connector/models.py\n/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc\n/volume2/docker/garmin-connector/python-garminconnect-testing.md\n/volume2/docker/garmin-connector/README.md\n/volume2/docker/garmin-connector/requirements.txt\n/volume2/docker/garmin-connector/sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of this project. Here's the full overview:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Service Overview","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Service Overview","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"This is a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Garmin Connect data pipeline","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a FastAPI service that:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authenticates to Garmin Connect using your credentials","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches health/fitness data (sleep, steps, heart rate) via the unofficial","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garminconnect","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Python library","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stores it in a local PostgreSQL database","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Runs on Docker (port","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8007","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Architecture","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Architecture","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker\n├── garmin-api (FastAPI, port 8007)\n│ ├── Daily scheduler (currently 15:25 UTC)\n│ └── REST endpoints\n└── garmin-db (PostgreSQL, port 5436)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to Use","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to Use","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Start it:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume2/docker/garmin-connector\ndocker-compose up -d","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Available endpoints:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Interactive demo script","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":") is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pip install garminconnect readchar requests\npython demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Issues & Improvement Suggestions","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Issues & Improvement Suggestions","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Critical","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Critical","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1. Credentials exposed in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Your Garmin password is stored in plaintext in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— add","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"immediately if this repo is ever pushed to git.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2. Duplicate data on repeated runs","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:58-93","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:58-93","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"fetch_and_store()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"blindly","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"db.add()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"s every time it runs. Calling","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/fetch-today","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"twice creates duplicate rows for the same date. You need an upsert pattern (","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ON CONFLICT DO UPDATE","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or check-before-insert).","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3. Scheduler time comment is wrong","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:101-103","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:101-103","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the code schedules at","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"hour=15, minute=25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"but the comment says \"03:00\". Pick one and fix both.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Missing Functionality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Missing Functionality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4. No read endpoints for stored DB data","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There are no","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /steps","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /heartrate","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5. No backfill endpoint","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There's no way to fetch and store data for a past date range via the API. A","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch?date=2025-05-01","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /backfill?start=2025-01-01&end=2025-05-25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint would be useful.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"6.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is never used","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/sleep-processed","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint or removed.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Data Model Gaps","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Data Model Gaps","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"7. Sleep model loses detail","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py:6-13","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py:6-13","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"table only stores","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"start","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"end","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"duration_minutes","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":". It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"already parses all of this.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HeartRate","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"rows volume","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Code Quality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Code Quality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"9. Session management is fragile","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:35-44","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:35-44","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_client()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"401","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"errors.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"10.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"depends on","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"readchar","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"not in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"imports","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"readchar","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"which isn't listed, so","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pip install -r requirements.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"won't cover it. Either add it or keep a separate","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"requirements-dev.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Summary:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for richer data, and (4) add a backfill endpoint for historical data.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":".env","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is there some UI. what is the database and what data are stored?","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check if garmin containers are running","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | grep -E \"garmin|NAMES\"","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check all garmin containers including stopped ones","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | grep -E \"garmin|NAMES\"","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all Docker containers","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a 2>/dev/null | head -20","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check Docker availability","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker info 2>&1 | head -5","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Client: Docker Engine - Community\n Version: 26.1.0\n Context: default\n Debug Mode: false\n Plugins:","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all containers with names and status","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a --format \"{{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List Docker contexts","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"}]...
|
-2243416047240928553
|
7915808401298982415
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the
Sleep
table only stores
start
,
end
,
duration_minutes
. It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.
sleep_processing.py
already parses all of this.
8.
HeartRate
rows volume
Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.
Code Quality
Code Quality
9. Session management is fragile
main.py:35-44
main.py:35-44
—
get_client()
re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on
401
errors.
10.
demo.py
depends on
readchar
not in
requirements.txt
requirements.txt
requirements.txt
—
demo.py
imports
readchar
which isn't listed, so
pip install -r requirements.txt
won't cover it. Either add it or keep a separate
requirements-dev.txt
.
Summary:
The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in
sleep_processing.py
for richer data, and (4) add a backfill endpoint for historical data.
Message actions
.env
.env
is there some UI. what is the database and what data are stored?
Thinking
Thinking
Bash
Check if garmin containers are running
IN
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check all garmin containers including stopped ones
IN
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
List all Docker containers
IN
docker ps -a 2>/dev/null | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check Docker availability
IN
docker info 2>&1 | head -5
Copy code to clipboard
OUT
Client: Docker Engine - Community
Version: 26.1.0
Context: default
Debug Mode: false
Plugins:
Bash
List all containers with names and status
IN
docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
Bash
List Docker contexts
IN...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72920
|
2618
|
63
|
2026-05-26T17:45:25.002053+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817525002_m1.jpg...
|
Code
|
Review project and plan … — garmin-connector [SSH: Review project and plan … — garmin-connector [SSH: nas]...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":11,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":9,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":10,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: garmin-connector [SSH: nas]","depth":13,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: garmin-connector [SSH: nas]","depth":14,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"GARMIN-CONNECTOR [SSH: NAS]","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"examples","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"models.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"python-garminconnect-testing.md","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ui.html","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":13,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":14,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":13,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":14,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":".env, preview, Editor Group 1","depth":20,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":20,"on_screen":true,"value":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Review project and plan …, Editor Group 2","depth":20,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Review project and plan …","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal 5, bash Use ⌥F1 for terminal accessibility help","depth":28,"bounds":{"left":0.0,"top":0.0,"width":0.0048611113,"height":0.015555556},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal input","depth":29,"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot status","depth":8,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Command Succeeded","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Review project and plan improvements","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":2,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":2,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"demo.py","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the project structure first.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all files in garmin-connector project","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/garmin-connector -type f | sort","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/garmin-connector/db.py\n/volume2/docker/garmin-connector/demo.py\n/volume2/docker/garmin-connector/docker-compose.yml\n/volume2/docker/garmin-connector/Dockerfile\n/volume2/docker/garmin-connector/.env\n/volume2/docker/garmin-connector/examples/sleep_data_example.json\n/volume2/docker/garmin-connector/main.py\n/volume2/docker/garmin-connector/models.py\n/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc\n/volume2/docker/garmin-connector/python-garminconnect-testing.md\n/volume2/docker/garmin-connector/README.md\n/volume2/docker/garmin-connector/requirements.txt\n/volume2/docker/garmin-connector/sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of this project. Here's the full overview:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Service Overview","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Service Overview","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"This is a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Garmin Connect data pipeline","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a FastAPI service that:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authenticates to Garmin Connect using your credentials","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches health/fitness data (sleep, steps, heart rate) via the unofficial","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garminconnect","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Python library","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stores it in a local PostgreSQL database","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Runs on Docker (port","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8007","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Architecture","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Architecture","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker\n├── garmin-api (FastAPI, port 8007)\n│ ├── Daily scheduler (currently 15:25 UTC)\n│ └── REST endpoints\n└── garmin-db (PostgreSQL, port 5436)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to Use","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to Use","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Start it:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume2/docker/garmin-connector\ndocker-compose up -d","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Available endpoints:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Interactive demo script","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":") is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pip install garminconnect readchar requests\npython demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Issues & Improvement Suggestions","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Issues & Improvement Suggestions","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Critical","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Critical","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1. Credentials exposed in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Your Garmin password is stored in plaintext in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— add","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"immediately if this repo is ever pushed to git.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2. Duplicate data on repeated runs","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:58-93","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:58-93","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"fetch_and_store()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"blindly","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"db.add()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"s every time it runs. Calling","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/fetch-today","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"twice creates duplicate rows for the same date. You need an upsert pattern (","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ON CONFLICT DO UPDATE","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or check-before-insert).","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3. Scheduler time comment is wrong","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:101-103","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:101-103","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the code schedules at","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"hour=15, minute=25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"but the comment says \"03:00\". Pick one and fix both.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Missing Functionality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Missing Functionality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4. No read endpoints for stored DB data","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There are no","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /steps","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /heartrate","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5. No backfill endpoint","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There's no way to fetch and store data for a past date range via the API. A","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch?date=2025-05-01","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /backfill?start=2025-01-01&end=2025-05-25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint would be useful.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"6.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is never used","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/sleep-processed","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint or removed.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Data Model Gaps","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Data Model Gaps","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"7. Sleep model loses detail","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py:6-13","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py:6-13","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the","depth":6,"on_screen":false,"role_description":"text"}]...
|
1588169206167526878
|
-2465560759640604099
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
72919
|
2618
|
62
|
2026-05-26T17:45:23.989650+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817523989_m1.jpg...
|
Firefox
|
Garmin Dashboard — Personal
|
1
|
http://192.168.0.242:8007/ui
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238
112
2,316
11
5,925
4,370
201
3,739
VS GOAL (8 000)
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Close
Low
Low
Low
❤️ Heart Rate (daily min / avg / max)
DATE
MIN
AVG...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Garmin Dashboard","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Garmin Dashboard","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"🏃 Garmin Dashboard","depth":1,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"🏃 Garmin Dashboard","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":3,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":2,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Refresh","depth":1,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AVG SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 14m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST SLEEP","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG STEPS","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,098","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEST STEPS DAY","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG RESTING HR","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"66 bpm","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HR RANGE","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43–126","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"😴 Sleep Duration","depth":2,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.078125,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.07986111,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.08055556,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.081597224,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.0,"top":0.0055555557,"width":0.07951389,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.12708333,"top":0.0055555557,"width":0.08055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.006666667,"width":0.014930556,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DURATION","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8h 21m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 15m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 13m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 12m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 4m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 42m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 17m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 50m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4h 39m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 1m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7h 45m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 44m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 33m","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6h 31m","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BEDTIME","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 21:24","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 20:30","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 21:47","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 21:49","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 22:18","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 20:28","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 19:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 20:15","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 21:59","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 21:21","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 20:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 20:53","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 20:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 20:32","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 19:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 21:31","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.078125,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 20:56","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.08055556,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 20:31","depth":6,"bounds":{"left":0.0,"top":0.0055555557,"width":0.07951389,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WAKE","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25 03:11","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24 05:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23 03:29","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22 03:31","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21 03:06","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20 04:00","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19 03:36","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18 03:39","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17 04:50","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16 03:44","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15 04:03","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14 03:43","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13 03:38","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12 03:37","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11 03:45","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10 05:17","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 04:31","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.07986111,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 03:46","depth":6,"bounds":{"left":0.12708333,"top":0.0,"width":0.081597224,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 04:29","depth":6,"bounds":{"left":0.12708333,"top":0.0055555557,"width":0.08055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Good","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.0,"width":0.014930556,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fair","depth":7,"bounds":{"left":0.3517361,"top":0.006666667,"width":0.014930556,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"👟 Daily Steps","depth":2,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"bounds":{"left":0.0,"top":0.41555557,"width":0.027777778,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"bounds":{"left":0.10069445,"top":0.41555557,"width":0.072916664,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.0,"top":0.45277777,"width":0.00625,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.4538889,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"bounds":{"left":0.0,"top":0.49222222,"width":0.017013889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.49333334,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"bounds":{"left":0.0,"top":0.5322222,"width":0.02638889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.53333336,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"bounds":{"left":0.0,"top":0.57222223,"width":0.026041666,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.5733333,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"bounds":{"left":0.0,"top":0.6116667,"width":0.025,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.61277777,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"bounds":{"left":0.0,"top":0.65166664,"width":0.02673611,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.6527778,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"bounds":{"left":0.0,"top":0.6911111,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.69222224,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"bounds":{"left":0.0,"top":0.7311111,"width":0.016319444,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7322222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"bounds":{"left":0.0,"top":0.77111113,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7722222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"bounds":{"left":0.0,"top":0.8105556,"width":0.024652777,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.81166667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"bounds":{"left":0.0,"top":0.85055554,"width":0.025347222,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.8516667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"bounds":{"left":0.0,"top":0.89,"width":0.017361112,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.89111114,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"bounds":{"left":0.0,"top":0.93,"width":0.018055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9311111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"bounds":{"left":0.0,"top":0.97,"width":0.015277778,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9711111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,316","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.025347222,"height":-0.009444475},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.015972223,"height":-0.010555506},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.009375,"height":-0.049444437},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.015972223,"height":-0.050555587},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.02638889,"height":-0.08888888},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.022222223,"height":-0.09000003},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,370","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"201","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,739","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-26","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-25","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-24","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-23","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-22","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-21","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-20","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-19","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-18","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-17","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-16","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-15","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-14","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-13","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-12","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-11","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STEPS","depth":6,"bounds":{"left":0.0,"top":0.41555557,"width":0.027777778,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.0,"top":0.45277777,"width":0.00625,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":7,"bounds":{"left":0.0,"top":0.49222222,"width":0.017013889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,025","depth":7,"bounds":{"left":0.0,"top":0.5322222,"width":0.02638889,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,597","depth":7,"bounds":{"left":0.0,"top":0.57222223,"width":0.026041666,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,221","depth":7,"bounds":{"left":0.0,"top":0.6116667,"width":0.025,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,333","depth":7,"bounds":{"left":0.0,"top":0.65166664,"width":0.02673611,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,423","depth":7,"bounds":{"left":0.0,"top":0.6911111,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":7,"bounds":{"left":0.0,"top":0.7311111,"width":0.016319444,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,584","depth":7,"bounds":{"left":0.0,"top":0.77111113,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":7,"bounds":{"left":0.0,"top":0.8105556,"width":0.024652777,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,612","depth":7,"bounds":{"left":0.0,"top":0.85055554,"width":0.025347222,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"627","depth":7,"bounds":{"left":0.0,"top":0.89,"width":0.017361112,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"238","depth":7,"bounds":{"left":0.0,"top":0.93,"width":0.018055556,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"112","depth":7,"bounds":{"left":0.0,"top":0.97,"width":0.015277778,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2,316","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.025347222,"height":-0.009444475},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.009375,"height":-0.049444437},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,925","depth":7,"bounds":{"left":0.0,"top":1.0,"width":0.02638889,"height":-0.08888888},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4,370","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"201","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,739","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VS GOAL (8 000)","depth":6,"bounds":{"left":0.10069445,"top":0.41555557,"width":0.072916664,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.4538889,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.49333334,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.53333336,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.5733333,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.61277777,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.6527778,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.69222224,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7322222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.7722222,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.81166667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.8516667,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.89111114,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9311111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":0.9711111,"width":0.015972223,"height":0.015555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.015972223,"height":-0.010555506},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.015972223,"height":-0.050555587},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":7,"bounds":{"left":0.10625,"top":1.0,"width":0.022222223,"height":-0.09000003},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"❤️ Heart Rate (daily min / avg / max)","depth":2,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MIN","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AVG","depth":6,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
2488988046694880200
|
-4822101853703063704
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Garmin Dashboard
Garmin Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
🏃 Garmin Dashboard
🏃 Garmin Dashboard
From
26
/
04
/
2026
Calendar
To
26
/
05
/
2026
Calendar
Refresh
AVG SLEEP
6h 14m
BEST SLEEP
8h 21m
AVG STEPS
2,098
BEST STEPS DAY
5,925
AVG RESTING HR
66 bpm
HR RANGE
43–126
😴 Sleep Duration
DATE
DURATION
BEDTIME
WAKE
QUALITY
2026-05-25
5h 21m
2026-05-24 21:24
2026-05-25 03:11
Short
2026-05-24
8h 21m
2026-05-23 20:30
2026-05-24 05:29
Good
2026-05-23
5h 15m
2026-05-22 21:47
2026-05-23 03:29
Short
2026-05-22
5h 13m
2026-05-21 21:49
2026-05-22 03:31
Short
2026-05-21
6h 12m
2026-05-20 20:28
2026-05-21 03:06
Fair
2026-05-20
5h 4m
2026-05-19 22:18
2026-05-20 04:00
Short
2026-05-19
6h 42m
2026-05-18 20:28
2026-05-19 03:36
Fair
2026-05-18
6h 17m
2026-05-17 19:59
2026-05-18 03:39
Fair
2026-05-17
7h 50m
2026-05-16 20:15
2026-05-17 04:50
Good
2026-05-16
5h 1m
2026-05-15 21:59
2026-05-16 03:44
Short
2026-05-15
4h 39m
2026-05-14 21:21
2026-05-15 04:03
Short
2026-05-14
6h 45m
2026-05-13 20:45
2026-05-14 03:43
Fair
2026-05-13
5h 44m
2026-05-12 20:53
2026-05-13 03:38
Short
2026-05-12
6h 1m
2026-05-11 20:36
2026-05-12 03:37
Fair
2026-05-11
6h 33m
2026-05-10 20:32
2026-05-11 03:45
Fair
2026-05-10
7h 45m
2026-05-09 19:44
2026-05-10 05:17
Good
2026-05-09
6h 44m
2026-05-08 21:31
2026-05-09 04:31
Fair
2026-05-08
6h 33m
2026-05-07 20:56
2026-05-08 03:46
Fair
2026-05-07
6h 31m
2026-05-06 20:31
2026-05-07 04:29
Fair
DATE
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
DURATION
5h 21m
8h 21m
5h 15m
5h 13m
6h 12m
5h 4m
6h 42m
6h 17m
7h 50m
5h 1m
4h 39m
6h 45m
5h 44m
6h 1m
6h 33m
7h 45m
6h 44m
6h 33m
6h 31m
BEDTIME
2026-05-24 21:24
2026-05-23 20:30
2026-05-22 21:47
2026-05-21 21:49
2026-05-20 20:28
2026-05-19 22:18
2026-05-18 20:28
2026-05-17 19:59
2026-05-16 20:15
2026-05-15 21:59
2026-05-14 21:21
2026-05-13 20:45
2026-05-12 20:53
2026-05-11 20:36
2026-05-10 20:32
2026-05-09 19:44
2026-05-08 21:31
2026-05-07 20:56
2026-05-06 20:31
WAKE
2026-05-25 03:11
2026-05-24 05:29
2026-05-23 03:29
2026-05-22 03:31
2026-05-21 03:06
2026-05-20 04:00
2026-05-19 03:36
2026-05-18 03:39
2026-05-17 04:50
2026-05-16 03:44
2026-05-15 04:03
2026-05-14 03:43
2026-05-13 03:38
2026-05-12 03:37
2026-05-11 03:45
2026-05-10 05:17
2026-05-09 04:31
2026-05-08 03:46
2026-05-07 04:29
QUALITY
Short
Good
Short
Short
Fair
Short
Fair
Fair
Good
Short
Short
Fair
Short
Fair
Fair
Good
Fair
Fair
Fair
👟 Daily Steps
DATE
STEPS
VS GOAL (8 000)
2026-05-26
0
Low
2026-05-25
134
Low
2026-05-24
3,025
Low
2026-05-23
2,597
Low
2026-05-22
2,221
Low
2026-05-21
3,333
Low
2026-05-20
4,423
Low
2026-05-19
221
Low
2026-05-18
2,584
Low
2026-05-17
1,274
Low
2026-05-16
4,612
Low
2026-05-15
627
Low
2026-05-14
238
Low
2026-05-13
112
Low
2026-05-12
2,316
Low
2026-05-11
11
Low
2026-05-10
5,925
Close
2026-05-09
4,370
Low
2026-05-08
201
Low
2026-05-07
3,739
Low
DATE
2026-05-26
2026-05-25
2026-05-24
2026-05-23
2026-05-22
2026-05-21
2026-05-20
2026-05-19
2026-05-18
2026-05-17
2026-05-16
2026-05-15
2026-05-14
2026-05-13
2026-05-12
2026-05-11
2026-05-10
2026-05-09
2026-05-08
2026-05-07
STEPS
0
134
3,025
2,597
2,221
3,333
4,423
221
2,584
1,274
4,612
627
238
112
2,316
11
5,925
4,370
201
3,739
VS GOAL (8 000)
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Low
Close
Low
Low
Low
❤️ Heart Rate (daily min / avg / max)
DATE
MIN
AVG...
|
72915
|
NULL
|
NULL
|
NULL
|
|
72918
|
2619
|
66
|
2026-05-26T17:45:23.781218+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-26/1779 /Users/lukas/.screenpipe/data/data/2026-05-26/1779817523781_m2.jpg...
|
Code
|
Review project and plan … — garmin-connector [SSH: Review project and plan … — garmin-connector [SSH: nas]...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the
Sleep
table only stores
start
,
end
,
duration_minutes
. It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.
sleep_processing.py
already parses all of this.
8.
HeartRate
rows volume
Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.
Code Quality
Code Quality
9. Session management is fragile
main.py:35-44
main.py:35-44
—
get_client()
re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on
401
errors.
10.
demo.py
depends on
readchar
not in
requirements.txt
requirements.txt
requirements.txt
—
demo.py
imports
readchar
which isn't listed, so
pip install -r requirements.txt
won't cover it. Either add it or keep a separate
requirements-dev.txt
.
Summary:
The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in
sleep_processing.py
for richer data, and (4) add a backfill endpoint for historical data.
Message actions
.env
.env
is there some UI. what is the database and what data are stored?
Thinking
Thinking
Bash
Check if garmin containers are running
IN
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check all garmin containers including stopped ones
IN
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
List all Docker containers
IN
docker ps -a 2>/dev/null | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check Docker availability
IN
docker info 2>&1 | head -5
Copy code to clipboard
OUT
Client: Docker Engine - Community
Version: 26.1.0
Context: default
Debug Mode: false
Plugins:
Bash
List all containers with names and status
IN
docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
Bash
List Docker contexts
IN
docker context ls 2>&1
Copy code to clipboard
OUT
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
Bash
List all containers with sudo
IN
sudo docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | head -30
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check docker socket and current user groups
IN
ls /var/run/docker.sock 2>&1 && groups 2>&1
Copy code to clipboard
OUT
/var/run/docker.sock
admin users ughomeusers Media Social
Bash
Try docker ps with explicit socket
IN
DOCKER_HOST=unix:///var/run/docker.sock docker ps -a 2>&1 | head -20
Copy code to clipboard
OUT
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
Thinking
Thinking
Docker isn't accessible from this shell session, so I can't query the live DB. But I can answer fully from the code.
UI
UI
Only FastAPI's built-in Swagger UI
— no custom frontend exists.
Once the service is running, open in browser:
http://<your-nas-ip>:8007/docs
— interactive Swagger UI, lets you call all endpoints
http://<your-nas-ip>:8007/redoc
— alternative docs view
That's the only UI. There's no dashboard, no charts, no frontend.
Database
Database
PostgreSQL
(
garmin-db
, exposed on port
5436
).
Three tables, defined in
models.py
models.py
:
sleep
sleep
Column
Type
Notes
id
Integer PK
date
Date
start
String
GMT timestamp (stored as raw string from Garmin)
end
String
GMT timestamp
duration_minutes
Integer
sleepTimeSeconds / 60
Column
id
date
start
end
duration_minutes
Type
Integer PK
Date
String...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":11,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":11,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":11,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":11,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":11,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":11,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":14,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":11,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":11,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":9,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":10,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: garmin-connector [SSH: nas]","depth":13,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: garmin-connector [SSH: nas]","depth":14,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.06349734,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"GARMIN-CONNECTOR [SSH: NAS]","depth":15,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.06349734,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":26,"bounds":{"left":0.025265958,"top":0.07980846,"width":0.060837764,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":19,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"examples","depth":19,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.02825798,"top":0.11412609,"width":0.016954787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1292897,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":19,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.13168396,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.14684756,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":19,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":19,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":19,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.18435754,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":19,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2019154,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.02925532,"top":0.2019154,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":19,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.21947326,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029587766,"top":0.21947326,"width":0.012300532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"models.py","depth":19,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.23703113,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.029587766,"top":0.23703113,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"python-garminconnect-testing.md","depth":19,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.06948138,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":30,"bounds":{"left":0.028590426,"top":0.254589,"width":0.066821806,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":19,"bounds":{"left":0.025930852,"top":0.27134877,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":19,"bounds":{"left":0.025930852,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2897047,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.027593086,"top":0.2897047,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":19,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.04155585,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.02825798,"top":0.30726257,"width":0.039228722,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"bounds":{"left":0.01861702,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ui.html","depth":19,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.010970744,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":14,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":15,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":13,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09009308,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":15,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":14,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":15,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":".env, preview, Editor Group 1","depth":20,"bounds":{"left":0.10638298,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.109707445,"top":0.05347167,"width":0.0063164895,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.11702128,"top":0.05586592,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.118351065,"top":0.05586592,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.11170213,"top":0.07661612,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":22,"bounds":{"left":0.119015954,"top":0.07821229,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.119015954,"top":0.079010375,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.12034574,"top":0.079010375,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXTextArea","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":20,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.014365523},"on_screen":true,"value":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GARMIN_EMAIL=kovaliklukas@gmail.com\nGARMIN_PASSWORD=maxgup8zebzigaKzax\n\nPOSTGRES_USER=garmin\nPOSTGRES_PASSWORD=secretpassword\nPOSTGRES_DB=garmin_db\nPOSTGRES_HOST=db\nPOSTGRES_PORT=5432","depth":21,"bounds":{"left":0.12832446,"top":0.19393456,"width":0.084109046,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":36,"bounds":{"left":0.12832446,"top":0.09497207,"width":0.084109046,"height":0.025538707}},{"char_start":37,"char_count":35,"bounds":{"left":0.1306516,"top":0.10933759,"width":0.07945479,"height":0.011173184}},{"char_start":72,"char_count":1,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.0023271276,"height":0.011173184}},{"char_start":73,"char_count":21,"bounds":{"left":0.12832446,"top":0.13806863,"width":0.048204787,"height":0.025538707}},{"char_start":94,"char_count":33,"bounds":{"left":0.12832446,"top":0.15243416,"width":0.07679521,"height":0.025538707}},{"char_start":127,"char_count":22,"bounds":{"left":0.12832446,"top":0.16679968,"width":0.050531916,"height":0.025538707}},{"char_start":149,"char_count":17,"bounds":{"left":0.12832446,"top":0.1811652,"width":0.03856383,"height":0.025538707}},{"char_start":166,"char_count":17,"bounds":{"left":0.1306516,"top":0.19553073,"width":0.04089096,"height":0.011173184}}],"role_description":"text"},{"role":"AXRadioButton","text":"Review project and plan …, Editor Group 2","depth":20,"bounds":{"left":0.55352396,"top":0.047885075,"width":0.0731383,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Review project and plan …","depth":23,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.05285904,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.56416225,"top":0.05586592,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":24,"bounds":{"left":0.5668218,"top":0.05586592,"width":0.050199468,"height":0.011971269}}],"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":14,"bounds":{"left":0.109042555,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":16,"bounds":{"left":0.11303192,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":14,"bounds":{"left":0.13663563,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":16,"bounds":{"left":0.140625,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":14,"bounds":{"left":0.15990691,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":16,"bounds":{"left":0.16389628,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":14,"bounds":{"left":0.19946809,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":16,"bounds":{"left":0.20345744,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.20378989,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.20611702,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":14,"bounds":{"left":0.22606383,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":16,"bounds":{"left":0.23005319,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal 5, bash Use ⌥F1 for terminal accessibility help","depth":28,"bounds":{"left":0.24567819,"top":0.97126895,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.107380316,"top":0.97047085,"width":0.005319149,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Terminal input","depth":29,"bounds":{"left":0.4225399,"top":0.7573823,"width":0.0023271276,"height":0.011173184},"on_screen":true,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":8,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":9,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":8,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":8,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":8,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot status","depth":8,"bounds":{"left":0.9790558,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Command Succeeded","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Review project and plan improvements","depth":2,"bounds":{"left":0.55585104,"top":0.08060654,"width":0.09075798,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":2,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":2,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"demo.py","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the project structure first.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all files in garmin-connector project","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/garmin-connector -type f | sort","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/garmin-connector/db.py\n/volume2/docker/garmin-connector/demo.py\n/volume2/docker/garmin-connector/docker-compose.yml\n/volume2/docker/garmin-connector/Dockerfile\n/volume2/docker/garmin-connector/.env\n/volume2/docker/garmin-connector/examples/sleep_data_example.json\n/volume2/docker/garmin-connector/main.py\n/volume2/docker/garmin-connector/models.py\n/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc\n/volume2/docker/garmin-connector/python-garminconnect-testing.md\n/volume2/docker/garmin-connector/README.md\n/volume2/docker/garmin-connector/requirements.txt\n/volume2/docker/garmin-connector/sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":7,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of this project. Here's the full overview:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Service Overview","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Service Overview","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"This is a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Garmin Connect data pipeline","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a FastAPI service that:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authenticates to Garmin Connect using your credentials","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches health/fitness data (sleep, steps, heart rate) via the unofficial","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garminconnect","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Python library","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stores it in a local PostgreSQL database","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Runs on Docker (port","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8007","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Architecture","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Architecture","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker\n├── garmin-api (FastAPI, port 8007)\n│ ├── Daily scheduler (currently 15:25 UTC)\n│ └── REST endpoints\n└── garmin-db (PostgreSQL, port 5436)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to Use","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to Use","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Start it:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume2/docker/garmin-connector\ndocker-compose up -d","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Available endpoints:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch-today","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep-raw?date_str=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-methods","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /garmin-call?method=get_stress_data&date=2025-05-20","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetch today's sleep, steps & HR and store in DB","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Get raw Garmin sleep payload (not stored)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all available Garmin","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_*","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"methods","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Call any Garmin getter by name","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Endpoint","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Description","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Interactive demo script","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"demo.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":") is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":6,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pip install garminconnect readchar requests\npython demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Issues & Improvement Suggestions","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Issues & Improvement Suggestions","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Critical","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Critical","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1. Credentials exposed in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Your Garmin password is stored in plaintext in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— add","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"immediately if this repo is ever pushed to git.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2. Duplicate data on repeated runs","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:58-93","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:58-93","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"fetch_and_store()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"blindly","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"db.add()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"s every time it runs. Calling","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/fetch-today","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"twice creates duplicate rows for the same date. You need an upsert pattern (","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ON CONFLICT DO UPDATE","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or check-before-insert).","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3. Scheduler time comment is wrong","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:101-103","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:101-103","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the code schedules at","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"hour=15, minute=25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"but the comment says \"03:00\". Pick one and fix both.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Missing Functionality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Missing Functionality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4. No read endpoints for stored DB data","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There are no","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /steps","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /heartrate","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5. No backfill endpoint","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"There's no way to fetch and store data for a past date range via the API. A","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /fetch?date=2025-05-01","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"or","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /backfill?start=2025-01-01&end=2025-05-25","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint would be useful.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"6.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is never used","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"sleep_processing.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/sleep-processed","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"endpoint or removed.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Data Model Gaps","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Data Model Gaps","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"7. Sleep model loses detail","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py:6-13","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py:6-13","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"table only stores","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"start","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"end","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"duration_minutes","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":". It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"already parses all of this.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"8.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HeartRate","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"rows volume","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Code Quality","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Code Quality","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"9. Session management is fragile","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py:35-44","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py:35-44","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_client()","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"401","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"errors.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"10.","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"depends on","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"readchar","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"not in","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"—","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"demo.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"imports","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"readchar","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"which isn't listed, so","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pip install -r requirements.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"won't cover it. Either add it or keep a separate","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"requirements-dev.txt","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Summary:","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleep_processing.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for richer data, and (4) add a backfill endpoint for historical data.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":7,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":".env","depth":6,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is there some UI. what is the database and what data are stored?","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check if garmin containers are running","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | grep -E \"garmin|NAMES\"","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check all garmin containers including stopped ones","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | grep -E \"garmin|NAMES\"","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all Docker containers","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a 2>/dev/null | head -20","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check Docker availability","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker info 2>&1 | head -5","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Client: Docker Engine - Community\n Version: 26.1.0\n Context: default\n Debug Mode: false\n Plugins:","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all containers with names and status","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a --format \"{{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List Docker contexts","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker context ls 2>&1","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"NAME DESCRIPTION DOCKER ENDPOINT ERROR\ndefault * Current DOCKER_HOST based configuration unix:///var/run/docker.sock","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all containers with sudo","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sudo docker ps -a --format \"{{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | head -30","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check docker socket and current user groups","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /var/run/docker.sock 2>&1 && groups 2>&1","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/var/run/docker.sock\nadmin users ughomeusers Media Social","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Try docker ps with explicit socket","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DOCKER_HOST=unix:///var/run/docker.sock docker ps -a 2>&1 | head -20","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":7,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1\": dial unix /var/run/docker.sock: connect: permission denied","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":6,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Docker isn't accessible from this shell session, so I can't query the live DB. But I can answer fully from the code.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"UI","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"UI","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Only FastAPI's built-in Swagger UI","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— no custom frontend exists.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Once the service is running, open in browser:","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"http://<your-nas-ip>:8007/docs","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— interactive Swagger UI, lets you call all endpoints","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"http://<your-nas-ip>:8007/redoc","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— alternative docs view","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"That's the only UI. There's no dashboard, no charts, no frontend.","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Database","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Database","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PostgreSQL","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"garmin-db","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", exposed on port","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5436","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":").","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Three tables, defined in","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"models.py","depth":6,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"models.py","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"sleep","depth":5,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"sleep","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer PK","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"date","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"start","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"String","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GMT timestamp (stored as raw string from Garmin)","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"end","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"String","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GMT timestamp","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"duration_minutes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sleepTimeSeconds / 60","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Column","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"date","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"start","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"end","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"duration_minutes","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Type","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Integer PK","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"String","depth":8,"on_screen":false,"role_description":"text"}]...
|
6889799217025580957
|
-5923753251733338609
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: garmin-connector [SSH: nas]
Explorer Section: garmin-connector [SSH: nas]
GARMIN-CONNECTOR [SSH: NAS]
__pycache__
examples
.env
db.py
demo.py
docker-compose.yml
Dockerfile
main.py
models.py
python-garminconnect-testing.md
README.md
requirements.txt
sleep_processing.py
ui.html
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
.env, preview, Editor Group 1
.env
.env
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
GARMIN_EMAIL=[EMAIL]
[ENV_SECRET]
POSTGRES_USER=garmin
[ENV_SECRET]
POSTGRES_DB=garmin_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
Review project and plan …, Editor Group 2
Review project and plan …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
Terminal 5, bash Use ⌥F1 for terminal accessibility help
Terminal input
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot status
Info: Downloading VS Code Server...
Command Succeeded
Review project and plan improvements
Session history
New session
Message actions
demo.py
demo.py
review the project and let me knwo how cna I use it. GIve overview of the service and suggestions o nhe improvements
Thinking
Thinking
Let me explore the project structure first.
Bash
List all files in garmin-connector project
IN
find /volume2/docker/garmin-connector -type f | sort
Copy code to clipboard
OUT
/volume2/docker/garmin-connector/db.py
/volume2/docker/garmin-connector/demo.py
/volume2/docker/garmin-connector/docker-compose.yml
/volume2/docker/garmin-connector/Dockerfile
/volume2/docker/garmin-connector/.env
/volume2/docker/garmin-connector/examples/sleep_data_example.json
/volume2/docker/garmin-connector/main.py
/volume2/docker/garmin-connector/models.py
/volume2/docker/garmin-connector/__pycache__/sleep_processing.cpython-311.pyc
/volume2/docker/garmin-connector/python-garminconnect-testing.md
/volume2/docker/garmin-connector/README.md
/volume2/docker/garmin-connector/requirements.txt
/volume2/docker/garmin-connector/sleep_processing.py
Read
README.md
README.md
Read
main.py
main.py
Read
docker-compose.yml
docker-compose.yml
Read
models.py
models.py
Read
db.py
db.py
Read
sleep_processing.py
sleep_processing.py
,
demo.py
demo.py
Thinking
Thinking
Read
requirements.txt
requirements.txt
Read
.env
.env
Thinking
Thinking
Now I have a complete picture of this project. Here's the full overview:
Service Overview
Service Overview
This is a
Garmin Connect data pipeline
— a FastAPI service that:
Authenticates to Garmin Connect using your credentials
Fetches health/fitness data (sleep, steps, heart rate) via the unofficial
garminconnect
Python library
Stores it in a local PostgreSQL database
Runs on Docker (port
8007
)
Architecture
Architecture
Copy code to clipboard
Docker
├── garmin-api (FastAPI, port 8007)
│ ├── Daily scheduler (currently 15:25 UTC)
│ └── REST endpoints
└── garmin-db (PostgreSQL, port 5436)
How to Use
How to Use
Start it:
Copy code to clipboard
cd /volume2/docker/garmin-connector
docker-compose up -d
Available endpoints:
Endpoint
Description
GET /fetch-today
Fetch today's sleep, steps & HR and store in DB
GET /sleep-raw?date_str=2025-05-20
Get raw Garmin sleep payload (not stored)
GET /garmin-methods
List all available Garmin
get_*
methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Call any Garmin getter by name
Endpoint
GET /fetch-today
GET /sleep-raw?date_str=2025-05-20
GET /garmin-methods
GET /garmin-call?method=get_stress_data&date=2025-05-20
Description
Fetch today's sleep, steps & HR and store in DB
Get raw Garmin sleep payload (not stored)
List all available Garmin
get_*
methods
Call any Garmin getter by name
Endpoint
Description
Interactive demo script
(
demo.py
demo.py
) is a separate standalone CLI tool with a full menu-driven interface to explore all ~100+ Garmin API methods. Run it separately (not inside Docker):
Copy code to clipboard
pip install garminconnect readchar requests
python demo.py
Issues & Improvement Suggestions
Issues & Improvement Suggestions
Critical
Critical
1. Credentials exposed in
.env
Your Garmin password is stored in plaintext in
.env
.env
— add
.env
to
.gitignore
immediately if this repo is ever pushed to git.
2. Duplicate data on repeated runs
main.py:58-93
main.py:58-93
—
fetch_and_store()
blindly
db.add()
s every time it runs. Calling
/fetch-today
twice creates duplicate rows for the same date. You need an upsert pattern (
ON CONFLICT DO UPDATE
or check-before-insert).
3. Scheduler time comment is wrong
main.py:101-103
main.py:101-103
— the code schedules at
hour=15, minute=25
but the comment says "03:00". Pick one and fix both.
Missing Functionality
Missing Functionality
4. No read endpoints for stored DB data
There are no
GET /sleep
,
GET /steps
,
GET /heartrate
endpoints. You can write data to the DB but have no API to query it back — you'd have to connect to Postgres directly.
5. No backfill endpoint
There's no way to fetch and store data for a past date range via the API. A
GET /fetch?date=2025-05-01
or
GET /backfill?start=2025-01-01&end=2025-05-25
endpoint would be useful.
6.
sleep_processing.py
is never used
sleep_processing.py
sleep_processing.py
is an impressively detailed utility that builds minute-by-minute sleep timelines with SpO2, HRV, stress, body battery, respiration — but it's never called anywhere. It should either be wired into a
/sleep-processed
endpoint or removed.
Data Model Gaps
Data Model Gaps
7. Sleep model loses detail
models.py:6-13
models.py:6-13
— the
Sleep
table only stores
start
,
end
,
duration_minutes
. It drops sleep stages (deep/REM/light/awake), SpO2, HRV, respiration — all the interesting data.
sleep_processing.py
already parses all of this.
8.
HeartRate
rows volume
Storing per-minute HR readings means ~1440 rows/day. Consider storing only the summary (resting HR, max HR, average) unless you actually need the per-minute data downstream.
Code Quality
Code Quality
9. Session management is fragile
main.py:35-44
main.py:35-44
—
get_client()
re-logs in based on wall-clock time (1 hour TTL), but Garmin's session can expire for other reasons (rate limiting, server-side logout). There's no retry on
401
errors.
10.
demo.py
depends on
readchar
not in
requirements.txt
requirements.txt
requirements.txt
—
demo.py
imports
readchar
which isn't listed, so
pip install -r requirements.txt
won't cover it. Either add it or keep a separate
requirements-dev.txt
.
Summary:
The core pipeline works, but the biggest wins are: (1) add read endpoints for the DB, (2) fix duplicate-insert issue, (3) wire in
sleep_processing.py
for richer data, and (4) add a backfill endpoint for historical data.
Message actions
.env
.env
is there some UI. what is the database and what data are stored?
Thinking
Thinking
Bash
Check if garmin containers are running
IN
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check all garmin containers including stopped ones
IN
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -E "garmin|NAMES"
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
List all Docker containers
IN
docker ps -a 2>/dev/null | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check Docker availability
IN
docker info 2>&1 | head -5
Copy code to clipboard
OUT
Client: Docker Engine - Community
Version: 26.1.0
Context: default
Debug Mode: false
Plugins:
Bash
List all containers with names and status
IN
docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
Bash
List Docker contexts
IN
docker context ls 2>&1
Copy code to clipboard
OUT
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
Bash
List all containers with sudo
IN
sudo docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | head -30
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
Check docker socket and current user groups
IN
ls /var/run/docker.sock 2>&1 && groups 2>&1
Copy code to clipboard
OUT
/var/run/docker.sock
admin users ughomeusers Media Social
Bash
Try docker ps with explicit socket
IN
DOCKER_HOST=unix:///var/run/docker.sock docker ps -a 2>&1 | head -20
Copy code to clipboard
OUT
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
Thinking
Thinking
Docker isn't accessible from this shell session, so I can't query the live DB. But I can answer fully from the code.
UI
UI
Only FastAPI's built-in Swagger UI
— no custom frontend exists.
Once the service is running, open in browser:
http://<your-nas-ip>:8007/docs
— interactive Swagger UI, lets you call all endpoints
http://<your-nas-ip>:8007/redoc
— alternative docs view
That's the only UI. There's no dashboard, no charts, no frontend.
Database
Database
PostgreSQL
(
garmin-db
, exposed on port
5436
).
Three tables, defined in
models.py
models.py
:
sleep
sleep
Column
Type
Notes
id
Integer PK
date
Date
start
String
GMT timestamp (stored as raw string from Garmin)
end
String
GMT timestamp
duration_minutes
Integer
sleepTimeSeconds / 60
Column
id
date
start
end
duration_minutes
Type
Integer PK
Date
String...
|
72917
|
NULL
|
NULL
|
NULL
|