26 Commits

Author SHA1 Message Date
f43786f6af docs: 新增 Pipeline 四階段進度更新說明 (Core Team)
新增文件:
- docs/PIPELINE_PROGRESS_UPDATE_FOR_CORE.md

目的:
說明 Momentry Studio 前端對 Pipeline 進度顯示的實現和需求,供 Core Team 參考實現後端 API。

文件內容:

1. 四階段架構說明
   - 階段 1: 處理器 (30%) - ASR、ASRX、FACE、Face Tracing、OCR、CUT
   - 階段 2: 知識圖譜 (35%) - TKG Nodes、TKG Edges
   - 階段 3: 片段提取 (6%) - VLM Summary、Scene VLM、Moment Chunks
   - 階段 4: 資料整合 (29%) - Rule1、Rule2、Face Dedup

2. 關鍵更新說明
   - ASRX 處理器: 說話人向量化 (VOD)
   - Face Tracing: 從階段 4 移至階段 1
   - 向量入庫: 文字、說話人、人臉

3. 進度計算方式
   - 總體進度 = 加權平均
   - 計算範例

4. 需要的 API 端點
   - GET /api/v1/pipeline/phases (主要)
   - GET /api/v1/file/{uuid}/progress (快速輪詢)
   - GET /api/v1/file/{uuid}/scene-vlm-stats (已實現)

5. API 回應格式
   - 完整的 JSON 結構
   - 狀態值定義
   - 進度範例

6. 前端實現說明
   - 顯示位置
   - 顯示內容
   - 更新機制

7. 處理器完整列表
   - 名稱、功能、輸出

8. 建議實現順序
   - Phase 1-4 實現步驟

9. 驗收標準
   - API 驗收
   - 進度更新驗收
   - 前端顯示驗收

用途:
- Core Team 實現後端 API 的參考文件
- 前後端協作規範
- 測試驗收標準
2026-10-15 14:08:50 +08:00
9b3f88c98c docs: 更正處理器說明 - ASRX 和 Face Tracing
更新內容:

1. ASRX 處理器 (說話人向量化)
   - 修正名稱: VSRX → ASRX
   - 功能說明: 使用 VOD 將說話人語音特徵轉換為向量
   - 建立說話人身分

2. Face Tracing 移至階段 1
   - 從階段 4 (資料整合) 移至階段 1 (處理器)
   - 更新階段 4 進度說明
   - 更新範例場景

處理器完整列表:
- ASR: 語音識別
- ASRX: 說話人向量化 (VOD)
- FACE: 人臉檢測
- Face Tracing: 人臉追蹤
- OCR: 文字識別
- CUT: 鏡頭切換

階段 4 更新:
- 移除 Face Tracing (已移至階段 1)
- 保留: Rule1/Rule2 入庫、Face Dedup
- 進度含義更新
2026-10-15 13:10:38 +08:00
dafbfb7a0b docs: 添加 VSRX 處理器說明
更新內容:
- 處理器列表新增 VSRX (說話人辨認)
- VSRX 功能: 識別視訊中的說話人,建立說話人身分

處理器完整列表:
- ASR: 語音識別
- VSRX: 說話人辨認
- FACE: 人臉檢測
- OCR: 文字識別
- CUT: 鏡頭切換

說明:
VSRX 負責說話人辨認功能
- 識別視訊中的不同說話人
- 建立說話人身分
- 為後續說話人向量入庫提供基礎
2026-10-15 13:04:26 +08:00
1487793a9a docs: 更新為繁體中文並補充向量入庫說明
更新內容:
1. 繁體中文表達
   - 所有簡體字轉換為繁體
   - 用語符合台灣習慣

2. 移除已取消的處理器
   - 刪除 POSE (姿態估計)
   - 刪除 APPEARANCE (外觀檢測)
   - 這兩個處理器已實際取消

3. 補充向量入庫說明
   - 文字向量入庫
     * 句子嵌入向量
     * 語意搜尋
     * 相似文字匹配

   - 說話人語音向量入庫 (VOD 實現)
     * 說話人嵌入向量
     * 說話人識別
     * 跨視訊說話人追蹤

   - 人臉向量入庫
     * 人臉嵌入向量
     * 人臉相似度搜尋
     * 人臉身分識別

4. 更新階段 4 說明
   - Rule1: PostgreSQL 入庫
   - Rule2: 向量入庫 (Qdrant)
     * 文字向量
     * 說話人向量
     * 人臉向量

處理器列表:
- ASR: 語音識別
- FACE: 人臉檢測
- OCR: 文字識別
- CUT: 鏡頭切換

已移除:
- POSE: 姿態估計 (已取消)
- APPEARANCE: 外觀檢測 (已取消)
2026-10-15 12:48:59 +08:00
ae8861cf9d docs: 添加 Pipeline 四阶段中文说明文档
新增文档:
1. PIPELINE_STAGES_EXPLANATION.md - 详细说明
   - 四阶段总览
   - 各阶段详细说明
   - 进度计算方式
   - 依赖关系
   - 用户操作指南
   - 常见问题

2. PIPELINE_STAGES_QUICK_REF.md - 快速参考
   - 简洁表格总览
   - 关键信息快速查看
   - 进度计算公式
   - 使用提示

四阶段说明:
1. 处理器 (Processors) - 30%
   - 原始媒体分析
   - ASR、人脸检测、OCR等

2. 知识图谱 (Knowledge Graph) - 35%
   - 构建人物关系网络
   - TKG Nodes + Edges

3. 片段提取 (Moment Extraction) - 6%
   - AI 内容理解
   - 场景分析、片段分割

4. 数据整合 (Integration) - 29%
   - 数据入库存储
   - 人脸追踪、去重

用途:
- 用户理解处理流程
- 开发者参考架构
- 技术文档支持

语言: 中文
2026-10-15 12:37:19 +08:00
be3cef2e0d feat: MarkBase 三层架构设计
架构设计:
- Admin Layer: 系统管理 (admin.sqlite)
  * system_config - 系统配置
  * users - 用户管理
  * groups - 群组管理
  * permissions - 权限管理
  * audit_logs - 审计日志

- Group Layer: 群组管理 (group_{id}.sqlite)
  * group_config - 群组配置
  * group_members - 群组成员
  * group_files - 群组文件
  * group_permissions - 群组权限
  * group_shares - 群组共享

- User Layer: 用户数据 ({username}.sqlite)
  * user_config - 用户配置
  * user_files - 用户文件
  * user_bookmarks - 用户书签
  * search_history - 搜索历史
  * video_marks - 视频标记

目录结构:
data/
├── admin/admin.sqlite
├── groups/group_{id}.sqlite
└── users/{username}.sqlite

权限模型:
- Admin: 系统管理
- Group Owner: 群组管理
- Group Member: 群组访问
- User: 个人数据

文档:
- MARKBASE_THREE_LAYER_ARCHITECTURE.md - 完整架构设计
- THREE_LAYER_IMPLEMENTATION_GUIDE.md - 实施指南

脚本:
- init_three_layer_db.sh - 数据库初始化
- check_three_layer.sh - 架构检查

预计工作量: 3-5 天
优先级: 高
2026-10-12 15:08:48 +08:00
08584ecc87 docs: 确认用户数据库隔离问题
问题发现:
- Momentry Studio 硬编码 demo.sqlite
- 违反'一用户一数据库'设计原则
- 所有用户共享同一数据库

检查结果:
- Momentry Studio: 只有 1 个 demo.sqlite ❌
- MarkBase Core: 3 个用户数据库 ✅

修复方案:
1. 方案 1: 函数参数传递 (推荐)
   - db_path(username) 动态生成路径
   - 所有数据库函数添加 username 参数

2. 方案 2: 环境变量 (折中)
   - MOMENTRY_CURRENT_USER 环境变量
   - db_path() 读取环境变量

3. 方案 3: 全局状态 (Tauri State)
   - 线程安全的状态管理
   - 集中管理用户状态

受影响功能:
- 搜索历史
- 书签
- 视频标记
- 用户认证 (例外,保持共享)

工作量: 2-3 天
优先级: 高 (影响数据隔离)

文档:
- docs/USER_DATABASE_ISOLATION_FIX.md - 详细修复方案
- scripts/check_user_isolation.sh - 检查脚本
2026-10-12 14:50:34 +08:00
643ad66465 docs: 添加数据库依赖优化建议
问题:
- Momentry Studio 有未使用的 sqlx (PostgreSQL) 依赖
- 通过 markbase-core 间接引入

影响:
- 编译时间增加 ~30%
- 二进制大小增加 ~10%
- 依赖复杂度增加

解决方案:
- 方案 1: 移除 sqlx 依赖 (推荐)
- 方案 2: 禁用 PostgreSQL 功能
- 方案 3: 将 markbase-core 改为可选

收益:
- 编译时间减少 30%
- 二进制大小减少 10%
- 依赖更清晰

实施步骤:
- 创建备份分支
- 修改 Cargo.toml
- 测试功能
- 提交改动
2026-10-12 14:45:43 +08:00
1bd4b9215f docs: 确认数据库依赖关系
核心发现:
1. Momentry Studio
   - ✅ SQLite (rusqlite): 搜索历史、书签、用户认证
   - ❌ PostgreSQL (sqlx): 遗留依赖,未使用

2. MarkBase Core
   - ✅ SQLite: 认证数据
   - ⚠️ PostgreSQL: 可选,未启用

3. Momentry Core
   - ✅ PostgreSQL: 核心业务数据
   - ✅ Qdrant: 向量搜索
   - ✅ MongoDB: 文档存储

数据库文件:
- Momentry Studio: data/users/demo.sqlite
- MarkBase: ~/markbase/data/auth.sqlite
- Momentry Core: postgresql://localhost:5432/momentry

必需服务:
- PostgreSQL 12+ (pgvector 扩展)
- Qdrant 1.7+
- MongoDB 5+

建议:
- 移除 Momentry Studio 的 sqlx 依赖
- 简化依赖树
2026-10-12 14:41:57 +08:00
69ab0e8000 feat: 实现动态密码系统,消除硬编码
核心改动:
1. db.rs - 默认密码从环境变量读取或自动生成
   - 优先级: MOMENTRY_DEFAULT_PASSWORD > 自动生成
   - 格式: demo_<timestamp> 或自定义
   - 首次创建时打印密码到控制台

2. main.rs - SMB 服务密码动态化
   - 从 SMB_PASSWORD 或 MOMENTRY_DEFAULT_PASSWORD 读取
   - 支持自定义 SMB 用户名

3. user_tool.rs - 新增用户管理工具
   - list: 列出所有用户
   - create: 创建新用户
   - set-password: 修改密码
   - delete: 删除用户
   - init-demo: 初始化 demo 用户

4. install.sh - 安装时自动生成密码
   - 生成随机密码: demo_$(openssl rand -hex 4)
   - 保存到 .env 文件
   - 初始化数据库

5. .env.template - 新增密码配置
   - MOMENTRY_DEFAULT_PASSWORD
   - SMB_USER / SMB_PASSWORD

安全改进:
- 消除硬编码密码 'demo123'
- 每次安装密码唯一
- 密码哈希存储 (Argon2id)
- 支持自定义强密码

文档:
- docs/DEFAULT_PASSWORD_SYSTEM.md 完整说明
2026-10-12 14:25:47 +08:00
14fe2eda07 docs: 确认 ClientView 文件存储架构
确认结论:
- ClientView (/client) 使用 MarkBase API
- 文件存储位置: ~/momentry/var/sftpgo/data/{user}/
- 不是 ~/markbase 目录

架构详解:
1. API 端点
   - MarkBase API: localhost:11438
   - /api/v2/myfiles/{user}/folders
   - /api/v2/myfiles/{user}/files

2. 文件存储
   - 实际路径: ~/momentry/var/sftpgo/data/demo/
   - 包含所有上传的文件 (*.mp4)

3. MarkBase 目录
   - ~/markbase/data/ 存储 MarkBase 自身数据
   - 认证数据库 (auth.sqlite)
   - 配置文件
   - 不是文件存储位置

4. 配置映射
   - admin_config.json: server.storage_root
   - 环境变量: STORAGE_ROOT

关键区别:
- ~/markbase = MarkBase 项目代码和自身数据
- ~/momentry/var/sftpgo/data = 实际文件存储位置

部署注意:
- 需要创建 ~/momentry/var/sftpgo/data/{user}/
- 设置正确的权限
- 配置 STORAGE_ROOT 环境变量
2026-10-12 13:55:17 +08:00
bb45f0981a fix: 添加 m4promini 部署路径修复方案
问题:
- 100+ 处硬编码路径 /Users/accusys
- 配置文件 (admin_config.json) 无法适应新环境
- Rust 代码 (main.rs) 中 10+ 处路径硬编码
- 服务启动/停止命令依赖固定路径

影响:
- 无法在 m4promini (/Users/nextorageai) 上部署
- Admin 页面服务控制失效
- Worker 管理失败

解决方案:
1. 文档: docs/DEPLOYMENT_PATH_ISSUES.md
   - 详细分析所有硬编码路径
   - 提供 3 种修复方案
   - 环境变量优先级建议

2. 脚本: fix_paths_for_m4promini.sh
   - 自动替换所有硬编码路径
   - 创建备份
   - 生成环境变量模板
   - 创建部署说明

目标环境:
- 用户: nextorageai
- 主目录: /Users/nextorageai
- 项目目录: /Users/nextorageai/momentry_studio

下一步:
1. 在 m4promini 上运行 fix_paths_for_m4promini.sh
2. 配置环境变量 (.env)
3. 构建项目
4. 启动服务
2026-10-12 12:20:24 +08:00
7ee9ea0d30 docs: 添加分页实施路线图
内容:
- 文档索引(3 个核心文档)
- 实施目标(功能、性能)
- 实施步骤(Phase 1 + Phase 2)
- 快速开始指南(1 小时最小实施)
- 验证清单(功能、性能、样式)
- 技术栈适配表
- 故障排除指南
- 后续优化计划
- 成功标准

核心内容:
- 只需修改 1 个文件(SearchView.vue)
- 5 个步骤,预计 1-2 小时
- 初始加载提速 4x(2s → 0.5s)
- 渐进式加载降低内存占用

文档索引:
1. Agent_Search_Integration_Analysis.md - 分析文档
2. Vue3_Pagination_Implementation_Guide.md - 完整指南
3. Quick_Implementation_Checklist.md - 快速清单
4. Pagination_Implementation_Roadmap.md - 路线图
2026-10-11 21:38:26 +08:00
896b12be9a docs: 添加 Vue 3 分页实施指南
内容:
1. Vue3_Pagination_Implementation_Guide.md (718 行)
   - Vue 3 + TypeScript + Tauri 2 完整实施指南
   - 完整的代码示例
   - 分页和 Session 管理
   - 临时方案(兼容现有 API)

2. Quick_Implementation_Checklist.md (331 行)
   - 5 步快速实施(1-2 小时)
   - 只需修改 1 个文件(SearchView.vue)
   - 复制即用的代码片段
   - 验证步骤

实施方案:
- 添加状态(sessionId, hasMore, nextOffset 等)
- 实现 loadMore() 函数
- 修改 executeSearch() 支持分页
- 添加 More 按钮 UI
- 添加样式

预期效果:
- 初始加载:~2s → ~0.5s(4x 更快)
- 内存占用:渐进式加载
- 用户体验:立即反馈

技术栈适配:
- useState → ref / reactive
- useEffect → onMounted / watch
- lucide-react → 内联 SVG
2026-10-11 21:37:50 +08:00
1618965a9b docs: Agent Search 集成现状分析
内容:
- 分析提供的 React 文档与 Studio Vue 3 现状的差异
- 确认 Studio 已实现大部分功能(5 种搜索模式)
- 识别缺失的核心功能(More 按钮、Session 管理)
- 提供实施建议和优先级

现状:
✅ 5 种搜索模式(Keyword, Semantic, Visual, Agent, People)
✅ 统一搜索界面(SearchView.vue)
✅ 结果显示和视频播放
✅ 搜索历史和书签

缺失:
❌ More 按钮和分页加载(高优先级)
❌ Session 管理(高优先级)
❌ 智能意图识别(中优先级,可选)

技术栈差异:
- 提供的文档是 React 版本
- Studio 使用 Vue 3 + TypeScript
- 需要转换为 Composition API

下一步:
1. 实现 More 按钮 + 分页加载(1-2 天)
2. 后端实现 Session API(2-3 天)
3. 测试验证
2026-10-11 21:21:23 +08:00
e11ee429f1 docs: 添加 Tauri GUI 架构分析文档
内容:
- 四大模块总览(Search, File Prep, Admin, File Mgmt)
- 每个模块的详细分析(组件、API、数据流、数据库)
- 模块间交互关系和依赖关系
- 已知问题和改进建议
- API 调用链示例
- 技术栈总结

四大模块:
1. Search - 多模式搜索 + 历史管理
2. File Prep/Processing - Pipeline 处理 + 状态追踪
3. Admin - 系统监控 + 配置管理
4. File Management - 文件上传/下载/移动

关键问题:
- 双 API 架构复杂度
- 状态同步不一致
- 缩略图缓存无淘汰策略
- Pipeline 进度轮询效率低
- Admin 配置无验证

改进建议:
- 短期: WebSocket 状态推送、LRU Cache、批量查询
- 中期: 统一 API Gateway、Resumable Upload
- 长期: IndexedDB、离线模式、插件系统
2026-10-11 16:41:27 +08:00
af967b3345 docs: 添加 FaceFilterSettings 透明文件管理部署测试指南
内容:
- 完整的部署步骤
- 4 个测试场景(自动迁移、持久化、新文件、跨设备)
- API 行为变化说明
- 调试方法和故障排查
- 验证清单

测试文件: 020.mp4 (UUID: b496a68800f90770aa7246c877f38985)

相关:
- Core API: 86c776ce, 1379cf59
- Studio: 8789770, f75ebfa
2026-10-09 21:14:55 +08:00
f75ebfac88 fix: 修复 Face Filter UI 参数持久化到后端数据库
问题:
- UI Filter Rules (min_confidence, min_bbox_size 等) 修改后只保存到 localStorage
- 不会持久化到后端数据库,导致刷新页面或换浏览器后设置丢失

修复:
- updateRules() 函数现在会调用 markSingleFrameSettingsModified()
- 触发 500ms debounce 的 auto-save 到后端 API
- 保存完整的 FaceFilterSettings (包括 ui_filter_rules, processing_thresholds, trace_settings)

变更:
1. src/composables/useFaceFilter.ts
   - updateRules() 新增调用 markSingleFrameSettingsModified()
   - 确保 UI Filter Rules 修改后自动保存到后端

2. docs/FACE_FILTER_PERSISTENCE_TEST_GUIDE.md
   - 完整的测试指南
   - 包含调试方法和后端 API 要求

持久化流程:
- FaceFilterPanel 打开 → loadSingleFrameSettings() 从后端加载
- 用户修改参数 → updateRules() → markSingleFrameSettingsModified() → auto-save
- 500ms debounce → saveSingleFrameSettings() → PUT /api/v1/file-profile

测试:
- ✅ TypeScript 编译通过
- ⏳ 需要验证后端 API 支持

测试文件: 020.mp4 (UUID: b496a68800f90770aa7246c877f38985)
2026-10-09 16:25:26 +08:00
6423eeed77 feat: 更新 FaceFilterSettings TypeScript 类型定义为三段式统一结构
变更内容:
- 创建 src/types/faceFilter.ts 类型定义文件
- 新增 UiFilterRules, ProcessingThresholds, TraceSettings 三个子结构
- 更新 FaceFilterSettings 为三段式统一结构
- min_confidence 范围从 0-100 改为 0.0-1.0
- min_size 重命名为 min_bbox_size
- 新增字段: max_confidence, max_bbox_size, source, backend_status

向后兼容性:
- FaceFilterSettingsMigration.fromLegacy() 自动转换旧格式
- FaceFilterSettingsMigration.defaults() 提供默认值
- 保留向后兼容字段(deprecated 标记)

更新文件:
- src/composables/useFaceFilter.ts: 使用新类型,更新变量名
- src/components/FaceFilterPanel.vue: 更新导入和变量引用
- docs/FACE_FILTER_SETTINGS_MIGRATION_GUIDE.md: 完整迁移指南

测试:
- ✅ TypeScript 编译通过
- ✅ Vite build 成功

对应 Core API commit: 86c776ce
2026-10-09 15:13:50 +08:00
2f9b44d4b3 docs: 添加 Deep Scan 队列功能需求文档
目的:
- 提交给 Core Team 实现后端队列功能
- 替代当前前端临时队列方案

主要内容:
1. 问题背景和当前限制
2. 核心需求说明
3. API 设计建议(包含详细示例)
4. 数据库设计
5. 后端架构建议
6. 前端集成简化方案
7. 配置选项
8. 实施里程碑

关键特性:
- 全局队列管理
- 优先级支持
- 动态并发控制
- 错误重试机制
- 实时状态跟踪
2026-10-08 01:50:38 +08:00
7b60ca3d2d feat: add face filter components and integration guide
- useFaceFilter composable: manages face filtering state and API calls
- FaceFilterPanel component: UI for filtering controls
- FaceCard component: text-only face display card
- Integration guide: step-by-step guide for integrating into PeopleView

Implements hybrid filtering mode with:
- Instant mode: client-side filtering (5-10ms)
- Backend mode: server-side complex filtering
- Hybrid mode: backend + instant filtering (AND)

Uses actual Core API endpoints:
- GET /file/{uuid}/faces
- POST /file/{uuid}/faces/filter
- GET /file/{uuid}/face/{faceId}/filter-report
- GET /file/{uuid}/filter-stats

Preferences stored in localStorage.
2026-08-09 21:24:52 +08:00
5951aca086 feat: frame-based positioning and mark system foundation
Core Changes:
- Fix SearchView to use start_frame/end_frame directly (no time*fps conversion)
- Add hard_delete support to delete_trace API
- VideoPlayer: Main timeline + Mark system foundation
- Proxy: Add local routes for auth, media, identity-matches, cluster-results
- Add .gitignore to exclude build artifacts and dependencies

Design Documents:
- Multi-track Mark system design (.opencode/plans/)
- Video editing positioning standards research

Files Modified:
- src/views/SearchView.vue: Frame positioning, ensureMinDuration (240 frames)
- src/views/PeopleView.vue: batchDeleteGroups with hard_delete
- src/api/index.ts: delete_trace with hard_delete body
- src/components/VideoPlayer.vue: Timeline + Mark UI
- src-tauri/src/proxy.rs: New local routes
- AGENTS.md: Update documentation
2026-07-24 20:19:47 +08:00
299f58e883 docs: update cluster-agent implementation status 2026-07-20 21:49:25 +08:00
f915aaf794 feat: pending identity sorting, face detail modal, video player fps, processor counts 2026-06-24 02:02:33 +08:00
d910bac0bb docs: People 頁面設計文件,基於實測 API 定義 2026-06-14 12:52:22 +08:00
6d6fd2d43c docs: Core API 完整測試報告,所有端點實測驗證 2026-06-14 12:39:19 +08:00