A timeline of your day, automatically.
Turns your screen activity into a clean timeline with AI summaries and distraction highlights.
Quickstart • Why I built Dayflow • Features • How it works • Installation • Data & Privacy • Debug & Developer Tools • Auto‑updates • Contributing
What is Dayflow?
Dayflow is a native macOS app (SwiftUI) that records your screen at 1 FPS, analyzes it every 15 minutes with AI, and generates a timeline of your activities with summaries. It's lightweight (25MB app size) and uses ~100MB of RAM and <1% cpu.
Privacy‑minded by design: You choose your AI provider. Use Gemini (bring your own API key) or local models (Ollama / LM Studio). See Data & Privacy for details.
Why I built Dayflow
I built Dayflow after realizing that my calendar wasn't the source of truth for how I actually spent my time. My screen was. I wanted a calm, trustworthy timeline that let me see my workday without turning into yet another dashboard I had to maintain.
Dayflow stands for ownership and privacy by default. You control the data, you choose the AI provider, and you can keep everything local if that's what makes you comfortable. It's MIT licensed and fully open source because anything that watches your screen all day should be completely transparent about what it does with that information. The app should feel like a quiet assistant: respectful of your attention, honest about what it captures, and easy to shut off.
Features
Automatic timeline of your day with concise summaries.
of your day with concise summaries. 1 FPS recording - minimal CPU/storage impact.
- minimal CPU/storage impact. 15-minute analysis intervals for timely updates.
for timely updates. Watch timelapses of your day .
. Auto storage cleanup - removes old recordings after 3 days.
- removes old recordings after 3 days. Distraction highlights to see what pulled you off‑task.
to see what pulled you off‑task. Native UX built with SwiftUI .
built with . Auto‑updates with Sparkle (daily check + background download).
Coming soon
Infinitely customizable dashboard — ask any question about your workday, pipe the answers into tiles you arrange yourself, and track trends over time.
Daily journal — review the highlights Dayflow captured, reflect with guided prompts, and drop screenshots or notes alongside your generated timeline.
How it works
Capture — Records screen at 1 FPS in 15-second chunks. Analyze — Every 15 minutes, sends recent footage to AI. Generate — AI creates timeline cards with activity summaries. Display — Shows your day as a visual timeline. Cleanup — Auto-deletes recordings older than 3 days.
AI Processing Pipeline
The efficiency of your timeline generation depends on your chosen AI provider:
flowchart LR subgraph Gemini["Gemini Flow: 2 LLM Calls"] direction LR GV[Video] --> GU[Upload + Transcribe
1 LLM call] --> GC[Generate Cards
1 LLM call] --> GD[Done] end subgraph Local["Local Flow: 33+ LLM Calls"] direction LR LV[Video] --> LE[Extract 30 frames] --> LD[30 descriptions
30 LLM calls] --> LM[Merge
1 call] --> LT[Title
1 call] --> LC[Merge Check
1 call] --> LMC[Merge Cards
1 call] --> LD2[Done] end %% Styling classDef geminiFlow fill:#e8f5e8,stroke:#4caf50,stroke-width:2px classDef localFlow fill:#fff8e1,stroke:#ff9800,stroke-width:2px classDef geminiStep fill:#4caf50,color:#fff classDef localStep fill:#ff9800,color:#fff classDef processing fill:#f5f5f5,stroke:#666 classDef result fill:#e3f2fd,stroke:#1976d2 class Gemini geminiFlow class Local localFlow class GU,GC geminiStep class LD,LM,LT,LC,LMC localStep class GV,LV,LE processing class GD,LD2 result Loading Gemini leverages native video understanding for direct analysis, while Local models reconstruct understanding from individual frame descriptions - resulting in dramatically different processing complexity. Quickstart Download (end users) Grab the latest Dayflow.dmg from GitHub Releases. Open the app; grant Screen & System Audio Recording when prompted: macOS → System Settings → Privacy & Security → Screen & System Audio Recording → enable Dayflow. Build from source (developers) Install Xcode 15+ and open Dayflow.xcodeproj . Run the Dayflow scheme on macOS 13+. In your Run scheme, add your GEMINI_API_KEY under Arguments > Environment Variables (if using Gemini). Installation Requirements macOS 13.0+ Xcode 15+ A Gemini API key (if using Gemini): https://ai.google.dev/gemini-api/docs/api-key From Releases Download Dayflow.dmg and drag Dayflow into Applications. Launch and grant the Screen & System Audio Recording permission. From source git clone https://github.com/JerryZLiu/Dayflow.git cd Dayflow open Dayflow.xcodeproj # In Xcode: select the Dayflow target, configure signing if needed, then Run. Data & Privacy This section explains what Dayflow stores locally, what leaves your machine, and how provider choices affect privacy. Data locations (on your Mac) App support folder: ~/Library/Application Support/Dayflow/ Recordings (video chunks): ~/Library/Application Support/Dayflow/recordings/ Local database: ~/Library/Application Support/Dayflow/chunks.sqlite Recording details: 1 FPS capture, analyzed every 15 minutes, 3-day retention 1 FPS capture, analyzed every 15 minutes, 3-day retention Purge / reset tip: Quit Dayflow. Then delete the entire ~/Library/Application Support/Dayflow/ folder to remove recordings and analysis artifacts. Relaunch to start fresh. These paths are created by the app at first run. If you package Dayflow differently or run in a sandbox, paths may vary slightly. Processing modes & providers Gemini (cloud, BYO key) — Dayflow sends batch payloads to Google’s Gemini API for analysis. — Dayflow sends batch payloads to for analysis. Local models (Ollama / LM Studio) — Processing stays on‑device; Dayflow talks to a local server you run. TL;DR: Gemini data handling (my reading of Google’s ToS) Short answer: There is a way to prevent Google from training on your data. If you enable Cloud Billing on at least one Gemini API project, Google treats all of your Gemini API and Google AI Studio usage under the “Paid Services” data‑use rules — even when you’re using unpaid/free quota . Under Paid Services, Google does not use your prompts/responses to improve Google products/models . Terms: “When you activate a Cloud Billing account, all use of Gemini API and Google AI Studio is a ‘Paid Service’ with respect to how Google Uses Your Data, even when using Services that are offered free of charge.” (Gemini API Additional Terms) Abuse monitoring: even under Paid Services, Google logs prompts/responses for a limited period for policy enforcement and legal compliance . (Same Terms) EEA/UK/Switzerland: the Paid‑style data handling applies by default to all Services (including AI Studio and unpaid quota) even without billing . (Same Terms) If you on Gemini API project, Google treats under the data‑use rules — . Under Paid Services, . A couple useful nuances (from docs + forum clarifications): AI Studio is still free to use; enabling billing changes data handling , not whether Studio charges you. (Pricing page) to use; enabling billing changes , not whether Studio charges you. (Pricing page) UI “Plan: Paid” check: In AI Studio → API keys , you’ll typically see “Plan: Paid” once billing is enabled on any linked project (UI may evolve). In , you’ll typically see “Plan: Paid” once billing is enabled on any linked project (UI may evolve). Free workaround: “Make one project paid, keep using a free key elsewhere to get the best of both worlds.” The Terms imply account‑level coverage once any billing account is activated, but the Apps nuance above may limit this in specific UI contexts. Treat this as an interpretation, not legal advice. Local mode: privacy & trade‑offs Privacy: With Ollama/LM Studio , prompts and model inference run on your machine. LM Studio documents full offline operation once models are downloaded. With , prompts and model inference run on your machine. LM Studio documents full operation once models are downloaded. Quality/latency: Local open models are improving but can underperform cloud models on complex summarization. Local open models are improving but cloud models on complex summarization. Power/battery: Local inference is GPU‑heavy on Apple Silicon and will drain battery faster; prefer plugged‑in sessions for long captures. Local inference is on Apple Silicon and will drain battery faster; prefer sessions for long captures. Future: We may explore fine‑tuning or distilling a local model for better timeline summaries. References: LM Studio offline: https://lmstudio.ai/docs/app/offline Ollama GPU acceleration (Metal on Apple): https://github.com/ollama/ollama/blob/main/docs/gpu.md Permissions (macOS) To record your screen, Dayflow requires the Screen & System Audio Recording permission. Review or change later at: System Settings → Privacy & Security → Screen & System Audio Recording. Apple’s docs: https://support.apple.com/guide/mac-help/control-access-screen-system-audio-recording-mchld6aa7d23/mac Configuration AI Provider Choose Gemini (set GEMINI_API_KEY ) or Local (Ollama/LM Studio endpoint). For Gemini keys: https://ai.google.dev/gemini-api/docs/api-key Capture settings Start/stop capture from the main UI. Use Debug to verify batch contents. Data locations See Data & Privacy for exact paths and a purge tip. Debug & Developer Tools You can click the Dayflow icon in the menu bar and view the saved recordings Auto‑updates (Sparkle) Dayflow integrates Sparkle via Swift Package Manager and shows the current version + a “Check for updates” action. By default, the updater auto‑checks daily and auto‑downloads updates. Project structure Dayflow/ ├─ Dayflow/ # SwiftUI app sources (timeline UI, debug UI, capture & analysis pipeline) ├─ docs/ # Appcast and documentation assets (screenshots, videos) ├─ scripts/ # Release automation (DMG, notarization, appcast, Sparkle signing, one-button release) Troubleshooting Screen capture is blank or fails Check System Settings → Privacy & Security → Screen & System Audio Recording and ensure Dayflow is enabled. Check System Settings → Privacy & Security → and ensure is enabled. API errors Go into settings and verify your GEMINI_API_KEY and network connectivity. Roadmap V1 of the Dashboard (track answers to custom questions) V1 of the Dashboard (track answers to custom questions) V1 of the daily journal V1 of the daily journal Fine tuning a small VLM Contributing PRs welcome! If you plan a larger change, please open an issue first to discuss scope and approach. License Licensed under the MIT License. See LICENSE for the full text. Software is provided “AS IS”, without warranty of any kind.
1 LLM call] --> GC[Generate Cards
1 LLM call] --> GD[Done] end subgraph Local["Local Flow: 33+ LLM Calls"] direction LR LV[Video] --> LE[Extract 30 frames] --> LD[30 descriptions
30 LLM calls] --> LM[Merge
1 call] --> LT[Title
1 call] --> LC[Merge Check
1 call] --> LMC[Merge Cards
1 call] --> LD2[Done] end %% Styling classDef geminiFlow fill:#e8f5e8,stroke:#4caf50,stroke-width:2px classDef localFlow fill:#fff8e1,stroke:#ff9800,stroke-width:2px classDef geminiStep fill:#4caf50,color:#fff classDef localStep fill:#ff9800,color:#fff classDef processing fill:#f5f5f5,stroke:#666 classDef result fill:#e3f2fd,stroke:#1976d2 class Gemini geminiFlow class Local localFlow class GU,GC geminiStep class LD,LM,LT,LC,LMC localStep class GV,LV,LE processing class GD,LD2 result Loading Gemini leverages native video understanding for direct analysis, while Local models reconstruct understanding from individual frame descriptions - resulting in dramatically different processing complexity. Quickstart Download (end users) Grab the latest Dayflow.dmg from GitHub Releases. Open the app; grant Screen & System Audio Recording when prompted: macOS → System Settings → Privacy & Security → Screen & System Audio Recording → enable Dayflow. Build from source (developers) Install Xcode 15+ and open Dayflow.xcodeproj . Run the Dayflow scheme on macOS 13+. In your Run scheme, add your GEMINI_API_KEY under Arguments > Environment Variables (if using Gemini). Installation Requirements macOS 13.0+ Xcode 15+ A Gemini API key (if using Gemini): https://ai.google.dev/gemini-api/docs/api-key From Releases Download Dayflow.dmg and drag Dayflow into Applications. Launch and grant the Screen & System Audio Recording permission. From source git clone https://github.com/JerryZLiu/Dayflow.git cd Dayflow open Dayflow.xcodeproj # In Xcode: select the Dayflow target, configure signing if needed, then Run. Data & Privacy This section explains what Dayflow stores locally, what leaves your machine, and how provider choices affect privacy. Data locations (on your Mac) App support folder: ~/Library/Application Support/Dayflow/ Recordings (video chunks): ~/Library/Application Support/Dayflow/recordings/ Local database: ~/Library/Application Support/Dayflow/chunks.sqlite Recording details: 1 FPS capture, analyzed every 15 minutes, 3-day retention 1 FPS capture, analyzed every 15 minutes, 3-day retention Purge / reset tip: Quit Dayflow. Then delete the entire ~/Library/Application Support/Dayflow/ folder to remove recordings and analysis artifacts. Relaunch to start fresh. These paths are created by the app at first run. If you package Dayflow differently or run in a sandbox, paths may vary slightly. Processing modes & providers Gemini (cloud, BYO key) — Dayflow sends batch payloads to Google’s Gemini API for analysis. — Dayflow sends batch payloads to for analysis. Local models (Ollama / LM Studio) — Processing stays on‑device; Dayflow talks to a local server you run. TL;DR: Gemini data handling (my reading of Google’s ToS) Short answer: There is a way to prevent Google from training on your data. If you enable Cloud Billing on at least one Gemini API project, Google treats all of your Gemini API and Google AI Studio usage under the “Paid Services” data‑use rules — even when you’re using unpaid/free quota . Under Paid Services, Google does not use your prompts/responses to improve Google products/models . Terms: “When you activate a Cloud Billing account, all use of Gemini API and Google AI Studio is a ‘Paid Service’ with respect to how Google Uses Your Data, even when using Services that are offered free of charge.” (Gemini API Additional Terms) Abuse monitoring: even under Paid Services, Google logs prompts/responses for a limited period for policy enforcement and legal compliance . (Same Terms) EEA/UK/Switzerland: the Paid‑style data handling applies by default to all Services (including AI Studio and unpaid quota) even without billing . (Same Terms) If you on Gemini API project, Google treats under the data‑use rules — . Under Paid Services, . A couple useful nuances (from docs + forum clarifications): AI Studio is still free to use; enabling billing changes data handling , not whether Studio charges you. (Pricing page) to use; enabling billing changes , not whether Studio charges you. (Pricing page) UI “Plan: Paid” check: In AI Studio → API keys , you’ll typically see “Plan: Paid” once billing is enabled on any linked project (UI may evolve). In , you’ll typically see “Plan: Paid” once billing is enabled on any linked project (UI may evolve). Free workaround: “Make one project paid, keep using a free key elsewhere to get the best of both worlds.” The Terms imply account‑level coverage once any billing account is activated, but the Apps nuance above may limit this in specific UI contexts. Treat this as an interpretation, not legal advice. Local mode: privacy & trade‑offs Privacy: With Ollama/LM Studio , prompts and model inference run on your machine. LM Studio documents full offline operation once models are downloaded. With , prompts and model inference run on your machine. LM Studio documents full operation once models are downloaded. Quality/latency: Local open models are improving but can underperform cloud models on complex summarization. Local open models are improving but cloud models on complex summarization. Power/battery: Local inference is GPU‑heavy on Apple Silicon and will drain battery faster; prefer plugged‑in sessions for long captures. Local inference is on Apple Silicon and will drain battery faster; prefer sessions for long captures. Future: We may explore fine‑tuning or distilling a local model for better timeline summaries. References: LM Studio offline: https://lmstudio.ai/docs/app/offline Ollama GPU acceleration (Metal on Apple): https://github.com/ollama/ollama/blob/main/docs/gpu.md Permissions (macOS) To record your screen, Dayflow requires the Screen & System Audio Recording permission. Review or change later at: System Settings → Privacy & Security → Screen & System Audio Recording. Apple’s docs: https://support.apple.com/guide/mac-help/control-access-screen-system-audio-recording-mchld6aa7d23/mac Configuration AI Provider Choose Gemini (set GEMINI_API_KEY ) or Local (Ollama/LM Studio endpoint). For Gemini keys: https://ai.google.dev/gemini-api/docs/api-key Capture settings Start/stop capture from the main UI. Use Debug to verify batch contents. Data locations See Data & Privacy for exact paths and a purge tip. Debug & Developer Tools You can click the Dayflow icon in the menu bar and view the saved recordings Auto‑updates (Sparkle) Dayflow integrates Sparkle via Swift Package Manager and shows the current version + a “Check for updates” action. By default, the updater auto‑checks daily and auto‑downloads updates. Project structure Dayflow/ ├─ Dayflow/ # SwiftUI app sources (timeline UI, debug UI, capture & analysis pipeline) ├─ docs/ # Appcast and documentation assets (screenshots, videos) ├─ scripts/ # Release automation (DMG, notarization, appcast, Sparkle signing, one-button release) Troubleshooting Screen capture is blank or fails Check System Settings → Privacy & Security → Screen & System Audio Recording and ensure Dayflow is enabled. Check System Settings → Privacy & Security → and ensure is enabled. API errors Go into settings and verify your GEMINI_API_KEY and network connectivity. Roadmap V1 of the Dashboard (track answers to custom questions) V1 of the Dashboard (track answers to custom questions) V1 of the daily journal V1 of the daily journal Fine tuning a small VLM Contributing PRs welcome! If you plan a larger change, please open an issue first to discuss scope and approach. License Licensed under the MIT License. See LICENSE for the full text. Software is provided “AS IS”, without warranty of any kind.