# mindtrack-desk
**Repository Path**: CanFlyhang/mindtrack-desk
## Basic Information
- **Project Name**: mindtrack-desk
- **Description**: 基于LLM多模态的 Windows 屏幕记忆助手,总结你的每段专注时刻。
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-02-15
- **Last Updated**: 2026-02-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MindTrack Desk · 灵迹桌面
基于火山引擎豆包多模态能力的 **Windows 智能屏幕记忆助手**
记录你在电脑前的每一段「专注时刻」。
---
## ✨ 项目简介
**MindTrack Desk(灵迹桌面)** 是一个运行在 Windows 上的悬浮窗工具:
- 检测当前活动窗口的切换(例如你从 VS Code 切到浏览器)
- 自动为当前窗口截图,并调用 **火山引擎 Ark / 豆包多模态模型** 进行理解和总结
- 将「时间 + 窗口标题 + 截图 + AI 总结」保存到本地
- 提供一个炫酷的历史记录界面,帮助你回顾:
> 今天我到底都在干什么?
非常适合作为:
- 个人工作日志 / 时间追踪辅助
- 学习过程记录(看文档、写代码、看网课)
- 项目复盘时的时间线素材
> 🔒 所有截图与记录默认保存在本地(SQLite + 本地图片),不用担心被上传到第三方服务(除调用豆包 API 所需的图片外)。
---
## 🌈 核心特性
- 🪟 **悬浮窗 UI**
- 无边框、始终置顶、可拖拽移动
- 半透明深色风格,适合搭配各种主题桌面
- 一键「开始/暂停监控」、入口按钮打开历史记录
- 👀 **智能窗口监控**
- 基于 `pywin32` 捕获当前前台窗口句柄和标题
- 防抖逻辑:只有停留一定时间(例如 1.5s)才会触发一次分析
- 防刷屏:短时间频繁来回切换不会生成大量垃圾记录
- 🧠 **豆包多模态理解**
- 使用火山引擎 Ark Runtime SDK,调用豆包多模态模型(如 `doubao-seed-2-0-pro-260215` 或 vision 模型)
- 自动将截图编码为 Base64 传入 API,请求中包含提示词:
- 总结当前屏幕内容
- 推断你现在大概在做什么
- 对文档 / 代码 / 网页做简要提炼
- 📚 **可视化历史时间线**
- 以时间倒序展示最近若干条记录
- 点选任意一条可以查看:
- 截图大图
- AI 生成的文字总结
- 对应窗口标题与时间
- 💾 **本地存储**
- 使用 SQLite 数据库存储结构化信息
- 截图以 JPG 的形式保存在 `logs/images/` 目录
---
## 🏗 技术栈
- **语言**:Python 3.10+
- **桌面 UI**:PySide6 (Qt for Python)
- **Windows 底层能力**:pywin32(获取前台窗口、窗口标题、坐标)
- **截图**:mss + Pillow
- **AI 能力**:火山引擎 Ark Runtime(豆包多模态模型)
- **配置管理**:python-dotenv
- **本地存储**:SQLite3
---
## 📦 安装与运行
### 1. 克隆项目
```bash
git clone https://github.com/CanFlyhang/mindtrack-desk.git
cd mindtrack-desk
```
> ⚠️ 仓库名建议使用:`mindtrack-desk`
### 2. 创建虚拟环境(可选但推荐)
```bash
python -m venv venv
# Windows
.\venv\Scripts\activate
```
### 3. 安装依赖
```bash
pip install -r requirements.txt
```
### 4. 配置火山引擎豆包 Ark API
1. 参考火山引擎文档,在控制台创建 Ark API Key。
2. 将根目录下的 `.env.example` 复制为 `.env`:
```bash
cp .env.example .env # Windows 可直接手动复制重命名
```
3. 打开 `.env`,填入你的配置:
```ini
ARK_API_KEY=你的APIKey
# 选择你开通的多模态模型,比如:
ARK_MODEL_NAME=doubao-seed-2-0-pro-260215
# 截图保存目录(可保持默认)
SCREENSHOT_DIR=logs/images
```
### 5. 启动程序
```bash
python main.py
```
首次运行后,你会看到一个小巧的悬浮窗:
- 点击 **「开始监控」**,然后像平常一样切换不同窗口工作
- 稍等片刻,悬浮窗状态文案会变成「正在分析:xxx」、「完成:xxx」
- 点击 **「历史记录」**,可以看到 AI 总结过的时间线和截图
---
## 🧩 目录结构
```text
mindtrack-desk/
├── main.py # 程序入口,初始化 Qt 应用与控制器
├── requirements.txt # 依赖列表
├── .env.example # 环境变量示例(API Key / 模型名等)
├── src/
│ ├── ui/
│ │ ├── floating_window.py # 悬浮窗 UI
│ │ ├── history_window.py # 历史记录窗口 UI
│ │ └── styles.qss # 全局样式表(深色主题)
│ ├── services/
│ │ ├── monitor.py # WindowWatcher:监控当前活动窗口的 QThread
│ │ ├── capture.py # ScreenCapture:窗口 / 全屏截图 + Base64
│ │ ├── ai_client.py # ArkClient:封装豆包多模态 API 调用
│ │ ├── storage.py # DataManager:SQLite 本地存储
│ │ └── worker.py # AnalysisWorker:截图 + 调用 AI + 落地的后台线程
│ └── app_controller.py # AppController:将 UI 与所有服务串联起来
└── logs/
└── images/ # 截图保存目录
```
---
## 🧠 工作原理(简要)
1. **前台窗口监听**
- `WindowWatcher` 周期性调用 `win32gui.GetForegroundWindow()` 获取当前活动窗口句柄。
- 如果发现句柄变化且稳定一段时间(防抖),则触发一次「窗口变更」事件。
2. **截图与编码**
- 使用 `GetWindowRect` 获取窗口区域坐标。
- `mss` 按坐标截取当前窗口(失败时退化为全屏截屏)。
- 使用 Pillow 将图像压缩成 JPEG,并转成 Base64 字符串。
3. **调用豆包多模态模型**
- `ArkClient` 使用 `volcenginesdkarkruntime` 向 Ark 的 `/responses` / Chat 接口发送请求。
- 文本部分给出「请总结屏幕内容」等提示词,图像部分使用 `data:image/jpeg;base64,...` 方式嵌入。
4. **结果写入本地**
- `AnalysisWorker` 在后台线程中完成「截图 → 调用 AI → 写入 SQLite / 保存图片」的全流程。
- 完成后将简短的结果通过信号返回 UI,在悬浮窗中进行展示。
5. **历史记录展示**
- `HistoryWindow` 从 SQLite 中读取最近 N 条记录,左侧列表 + 右侧大图 + 文本详细摘要。
---
## 🤝 如何参与共创
欢迎任何形式的贡献,包括但不限于:
- 新功能:比如
- 黑名单应用(不对某些 App 截图)
- 自定义截图频率 / 防抖时间
- 导出为 Markdown 日志 / 导出为时间线 PDF
- Bug 修复:Windows 多屏形态、DPI 缩放适配问题等
- UI 改进:更酷的主题 / 动画 / 图标
- 文档与示例:使用教程、最佳实践、Demo 视频
### 提交方式
1. Fork 本仓库
2. 创建你的特性分支:`git checkout -b feature/your-feature-name`
3. 提交你的修改:`git commit -m "feat: xxx"`
4. 推送到你的仓库:`git push origin feature/your-feature-name`
5. 在 GitHub 上发起 Pull Request
---
## 📜 开源协议
建议使用 **MIT License** 或 **Apache-2.0 License**。
你可以在项目根目录添加 `LICENSE` 文件,例如 MIT:
```text
MIT License
Copyright (c) 2026 YOUR NAME
...
```
---
## ❓ 常见问题
### 1. 运行时提示「未配置 API Key」
请确认:
- `.env` 文件已存在且位于项目根目录
- 文件中包含正确的 `ARK_API_KEY`
- 你已经重新启动了程序
### 2. 关闭程序时终端出现 QThread 警告
项目中已经通过 `AppController.cleanup()` 做了统一线程收尾逻辑。
如果还有类似问题,欢迎提 Issue 并附上完整的终端输出日志。
### 3. 模型不返回图片相关内容,或者报「不支持图像」
请确认:
- `ARK_MODEL_NAME` 对应的是一个支持图片输入的 **多模态模型**
- 你在火山引擎控制台已经为该模型开通了对应的调用权限
---
## 🌟 Star & 分享
如果你觉得 **MindTrack Desk · 灵迹桌面** 对你有帮助,
欢迎在 GitHub 上点一个 ⭐ Star,并分享给更多也在折腾效率工具的朋友们。