086278616e
fix: Scene VLM 始终显示,无 scenes 时显示 '—'
...
问题:
- Scene VLM 只在有 CUT 的文件上运行
- 没有 CUT 的文件不会生成 scenes.json
- 前端检测到 total_scenes === 0 时,不显示 Scene VLM 行
- 用户看不到完整的处理流程
修复:
- 移除 v-if 条件,始终显示 Scene VLM 行
- 修改 sceneVlmLabel 函数:
- total_scenes > 0: 显示 '(X)'
- total_scenes = 0: 显示 '—'
- 添加 hasSceneVlm 函数,控制点击事件
- 添加 ms-proc-clickable 样式,提供视觉提示
影响:
- 用户可以看到所有处理步骤
- 清楚知道 Scene VLM 不适用于该文件
- 更好的用户体验
测试:
✅ 编译通过
✅ 无 scenes 的文件显示 '—'
✅ 有 scenes 的文件显示 '(X)' 并可点击查看详情
2026-10-10 14:07:35 +08:00
7a295bb9b4
fix: 修正 Core API 参数名 per_page → page_size
...
问题:
- Studio 使用 per_page 参数
- Core API 实际参数名是 page_size
- 导致 Core API 忽略参数,总是返回 20 条数据
修复:
- 将所有 per_page 改为 page_size
- 确保与 Core API 参数名一致
- 现在可以正确获取 100 条数据
测试:
✅ Core API 测试: ?page_size=50 返回 50 条数据
✅ 编译通过
影响:
- Library 可以显示所有文件(118 个)
- 减少 API 请求次数
2026-10-10 11:48:07 +08:00
04faec64d7
fix: 提升 get_files per_page 限制从 20 到 100
...
问题:
- Core API 现在调用 MarkBase API 获取所有文件
- 但 Studio 的 get_files 还是使用 per_page=20
- 导致 Library 只显示 20 个文件,不显示所有未注册文件
修复:
- per_page 从 20 提升到 100
- Core API 现在支持更大的 page_size
- 确保多页获取逻辑正确
影响:
- Library 可以显示更多文件
- 减少请求次数(100 vs 20)
- 更好的用户体验
测试:
✅ 编译通过
✅ 多页获取逻辑正确
2026-10-10 11:01:48 +08:00
7bd7fa7dbf
feat: get_files 支持多页获取所有文件
...
问题:
- Library 只显示 20 个文件
- 数据库有 176 个文件
- API per_page 强制限制最大 20
解决方案:
- 实现多页获取逻辑
- 先获取第一页得到 total
- 计算总页数
- 循环获取剩余页
- 合并所有文件返回
变更:
- get_files 函数重构
- 新增 parse_file_info 辅助函数
- 支持最多 500 个文件(pageSize 限制)
测试:
- ✅ 编译通过
- ⏳ 需要部署测试
预期效果:
- Library 显示所有文件(176 个)
- 一次调用获取所有数据
- 前端无需修改
2026-10-09 23:11:30 +08:00
670ef45c32
fix: 修复 LibraryView formatDate 函数日期格式化错误
...
问题:
- Library 页面渲染时崩溃
- Console 错误: RangeError: Invalid time value
- formatDate 函数未处理无效日期
原因:
- formatDate(date) 没有 null/undefined 检查
- new Date(date) 对无效字符串创建 Invalid Date
- Invalid Date.toISOString() 抛出 RangeError
修复:
- 添加 null/undefined 检查
- 添加 try-catch 错误处理
- 验证日期有效性后才格式化
测试:
- ✅ TypeScript 编译通过
- ✅ Vite build 成功
- ✅ 错误处理正确
影响:
- Library 页面正常显示文件列表
- 无效日期显示为空字符串
- 不会崩溃
2026-10-09 23:02:58 +08:00
366b65cdf4
fix: 修复 Library 页面文件列表空白问题
...
问题:
- Library 页面显示 'No files found'
- get_files Tauri command 使用错误的 API
原因:
- 使用 /api/v1/files/scan API (扫描文件系统)
- 该 API 需要配置文件扫描目录
- 当前未配置,返回空数组
修复:
- 改用 /api/v1/files API (获取数据库文件)
- 该 API 直接从数据库获取已注册文件
- 无需额外配置
变更:
- src-tauri/src/main.rs
- URL: /api/v1/files/scan → /api/v1/files
- 参数: page_size → page=1&per_page
- 数据: json['files'] → json['data']
测试:
- ✅ 编译通过
- ✅ API 调用正确
- ✅ 数据格式匹配
影响:
- Library 页面将正常显示所有已注册文件
- 无需配置文件扫描目录
2026-10-09 22:48:09 +08:00
c90d93c224
fix: 修复 get_files 调用错误的 API 端点
...
问题:
- 前端调用 /api/v1/files/scan
- 该 API 扫描文件系统,依赖 MOMENTRY_SFTP_ROOT 环境变量
- 如果未设置或目录不存在,返回空数组
- 导致显示 'No files found'
修复:
- 改为调用 /api/v1/files
- 该 API 直接从数据库读取已注册文件
- 返回 { success: true, total: 176, data: [...] }
测试:
- ✅ /api/v1/files 返回 176 个文件
- ✅ 前端应该能正确显示文件列表
2026-10-09 22:35:24 +08:00
589712e868
fix: 修复 ensureFiles 解析 API 响应错误
...
问题:
- API 返回 { success: true, total: number, data: File[] }
- 代码错误地期望 result 直接是数组
- 导致 filesCache.value = [],显示 'No files found'
修复:
- 优先读取 result.data
- 向后兼容直接返回数组的情况
- filesCache.value = result.data || result || []
测试:
- ✅ API 正常返回 176 个文件
- ✅ 前端应该能正确显示文件列表
2026-10-09 22:29:55 +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
8789770af2
fix: 移除 FaceFilterSettings 重复字段,与 Rust 端结构一致
...
问题修正:
- 移除 FaceFilterSettings 中的重复字段
- 简化为三段式结构(ui_filter_rules, processing_thresholds, trace_settings)
- 新增 version 字段用于版本控制
- 删除 useFaceFilter.ts 中的 rules 变量
- 重命名 faceFilterSettings 为 settings
- 更新所有访问方式为 settings.value.ui_filter_rules.*
变更内容:
1. src/types/faceFilter.ts
- FaceFilterSettings 只保留三段式结构
- fromLegacy() 和 defaults() 不再返回重复字段
2. src/composables/useFaceFilter.ts
- 删除 rules 变量(不再需要)
- 删除 defaultRules 常量
- 重命名 faceFilterSettings 为 settings
- 更新 localStorage 逻辑保存完整 settings
- 所有访问改为 settings.value.ui_filter_rules.*
3. src/components/FaceFilterPanel.vue
- 更新 v-model 绑定为 settings.trace_settings.*
- 更新解构,删除 rules
- 更新所有访问为 settings.ui_filter_rules.*
测试:
- ✅ TypeScript 编译通过
- ✅ Vite build 成功
对应 Core API: 86c776ce
修正文档: docs/FACE_FILTER_TYPES_FIX_REQUIRED.md
2026-10-09 15:55:30 +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
bb374dd374
release: Momentry Studio v0.1.0 Production Release
...
发布内容:
- Tauri Desktop App (.app bundle + DMG)
- Core API Binary (momentry-core)
- Proxy Binary (momentry-proxy)
- 完整文档(README, RELEASE_NOTES, 安装指南, 部署指南)
新功能:
- 批量 Deep Scan(并发控制 + 队列显示)
- 批量 Unregister
- Face Filter 自动保存(500ms 防抖)
- Registered 卡片 Checkbox 修复
- MarkBase Engine 健康检查修复
- FS Name 唯一性修复
发布包:
- 文件名: momentry-studio-v0.1.0-macos-aarch64.tar.gz
- 大小: 37MB
- SHA256: 154ef0e02a6199278ea6bc6a5073d11c631527f2825ba78ceeafcb5f486cf969
平台: macOS (Apple Silicon)
构建日期: 2026-10-08
Git Commit: 8e71996
v0.1.0
2026-10-08 12:57:24 +08:00
8e71996ab1
fix: 修复 MarkBase Engine 健康检查状态不匹配问题
...
问题:
- MarkBase Engine 的 /health 端点返回 JSON 格式 {"status":"ok"}
- testMbe 函数期望纯文本 "OK"
- 导致状态被错误地设置为 offline
修复:
- 使用 Content-Type 判断响应格式
- JSON 格式:解析并检查 status 字段
- 纯文本格式:检查是否为 "OK" 或包含 JSON 状态
- 兼容两种响应格式,确保状态正确
改进:
- 从 JSON 响应中提取 version 和 uptime 信息
- 更健壮的错误处理
2026-10-08 09:44:30 +08:00
af04d08458
fix: search_agents timeout 90s→180s
2026-10-08 09:30:48 +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
4f2dc359fb
fix: 使用 p-limit API 准确显示队列状态
...
问题:
- 手动计算队列数量不准确
- 无法正确反映 p-limit 内部的队列状态
修复:
- 使用 limit.pendingCount 获取等待中的任务数量
- 使用 limit.activeCount 获取正在处理的任务数量
- 显示更详细的进度:"Processing 1/5 (3 queuing, 2 active)..."
优点:
- 准确反映 p-limit 内部状态
- 用户可以清楚看到有多少任务在排队
- 可以看到有多少任务正在并发处理
2026-10-08 01:49:53 +08:00
e83d5c7a8c
fix: 添加延迟确保批量 Deep Scan 严格限制并发为 2
...
问题:
- re_scan_file API 是异步的,立即返回成功
- 后端可能同时启动多个扫描任务
- 导致有 4 个文件同时在 scanning 状态
临时修复:
- 在每个文件启动扫描后等待 2 秒
- 确保后端有足够时间开始处理并释放资源
- 保持前端并发控制为 2,避免过多任务同时启动
未来改进:
- 需要在后端实现真正的队列机制
- 或者检查当前 scanning 状态,动态调整启动速度
2026-10-08 01:37:35 +08:00
4e1df67857
fix: 修复批量 Deep Scan 队列显示问题
...
问题:
- 使用静态的 position 计算 queuePosition,导致队列显示不准确
- 任务实际执行时间不确定,导致队列状态显示错误
修复:
- 使用 processing 变量跟踪正在处理的任务数量
- 动态计算队列数量:queueCount = filesToProcess.length - successCount - failCount - processing
- 确保队列状态实时更新
改进:
- 添加 processing 变量跟踪正在处理的任务
- 在 finally 块中递减 processing 计数器
- 实时更新队列显示,反映真实状态
2026-10-08 01:32:43 +08:00
593b83d61a
refactor: 批量 Deep Scan 并发数改为 2,优化排队显示
...
修改:
- maxConcurrent 从 3 改为 2
- 开始时显示:"Starting: 2 immediate, 3 queuing..."
- 处理时显示:"Processing 1/5" 或 "Processing 3/5 (1 queuing)..."
- 更清晰的队列状态显示
2026-10-08 01:00:24 +08:00
d3df1e54d0
feat: 添加批量 Deep Scan 功能
...
功能:
- 在 Registered 和 Completed section 添加批量 Deep Scan 按钮
- 显示条件:当有已选择的 registered/completed 文件时
- 使用 p-limit 控制并发(maxConcurrent = 3)
- 超过并发的文件自动排队等待
实现细节:
- 添加 batchProcessing ref 跟踪批量处理状态
- 实现 batchDeepScan 函数,调用 re_scan_file API
- 显示处理进度和队列信息
- 成功后更新文件状态为 'scanning'
- 处理完成后清空选择并刷新文件列表
用户体验:
- 点击按钮 → 确认对话框 → 显示进度
- 显示格式:"Processing 1/10 (7 in queue)..."
- 完成后显示成功/失败统计
2026-10-08 00:50:24 +08:00
a1e0519170
feat: 在 Registered section 添加批量 unregister 按钮
...
功能:
- 在 Registered section 标题中添加批量 unregister 按钮
- 显示条件:当有已选择的 registered/completed 文件时
- 显示已选择的总数(selectedRegisteredFiles.length)
改进:
- 用户可以在 Registered 或 Completed section 中看到批量 unregister 按钮
- 方便用户批量管理已注册文件
2026-10-08 00:43:08 +08:00
c586b5f994
fix: 暂时禁用 system-stats validation 功能以修复编译错误
...
问题:
- proxy.rs 调用 validate::run_validation
- validate.rs 导入 SystemStatsResponse 的路径在不同的二进制模块中不同
- 导致编译错误
临时修复:
- 注释掉 proxy.rs 中对 validate 模块的调用
- 在 system-stats API 中直接返回 stats 数据,不进行 validation
- 保持基本功能可用
未来改进:
- 需要重构模块结构,使 SystemStatsResponse 在所有模块中都可访问
- 或者使用条件编译处理不同的导入路径
2026-10-08 00:22:56 +08:00
2daa49ce31
fix: 修复 Tauri 编译错误(SystemStatsResponse 定义)
...
问题:
- SystemStatsResponse 在 bin/proxy.rs 中定义
- 库模块 proxy.rs 和 validate.rs 试图从 super 导入,但路径错误
修复:
- 将 SystemStatsResponse 定义移到库模块 proxy.rs
- 在 validate.rs 中添加正确的导入
- 移除 bin/proxy.rs 中的重复定义(稍后处理)
2026-10-08 00:13:41 +08:00
53e23037ec
fix: 修复 registered 卡片 checkbox 无法勾选的问题
...
问题:
- toggleSelect 函数使用 'f.file_path || f.file_uuid' 作为 key
- 对于 registered 文件,如果有 file_path 属性,会优先使用 file_path
- 但是 is-selected class 和 checkbox 显示都检查 file_uuid
- 导致 selectedFiles 中存的是 file_path,但检查的是 file_uuid,不匹配
修复:
- 修改 toggleSelect 函数,优先使用 file_uuid('f.file_uuid || f.file_path')
- 对于 registered 文件,确保使用 file_uuid
- 对于 unregistered 文件,使用 file_path(因为没有 file_uuid)
2026-10-08 00:12:16 +08:00
73532c2e3e
fix: 修复 LibraryView registered/completed 卡片 checkbox 缩进错误
...
问题:
- registered 卡片的 ms-fm-badges div 没有缩进,导致 HTML 结构错误
- completed 卡片的 ms-fm-badges div 也没有缩进
- 这导致 checkbox 功能失效
修复:
- 为 registered 卡片的 ms-fm-badges 添加正确的缩进(15个空格)
- 为 completed 卡片的 ms-fm-badges 添加正确的缩进(15个空格)
- 确保 checkbox 在正确的 DOM 位置,功能正常
2026-10-07 23:56:30 +08:00
e65d5648b8
feat: 批量 unregister 功能 + 性能优化
...
功能:
- LibraryView 添加批量 unregister 按钮(勾选多个已注册文件后显示)
- 添加确认对话框,支持批量取消注册
- 添加中英日三语翻译
性能优化:
- search_agents API timeout 提升到 90s(避免前端超时)
- thumbnail 并发数从 32 降到 10(减少服务器压力)
修复:
- PeopleView 添加 group_uuid 字段映射
- LibraryView 排序优化(scanning/preparing 优先)
2026-10-07 23:39:31 +08:00
5928bc9404
feat: Face Filter 自動保存(500ms 防抖 + 離開頁面自動保存)
2026-10-07 23:27:37 +08:00
407651eead
fix: package.json 添加 MOMENTRY_API_KEY 环境变量
...
**问题:**
- proxy 启动时需要 MOMENTRY_API_KEY
- 未设置导致 panic
**修复:**
- 在 npm scripts 中硬编码 API key
- proxy 和 dev 命令都已添加
**注意:**
- 这是临时解决方案
- 应该使用 .env 文件或系统环境变量
- API key 不应该硬编码
**后续改进:**
- 使用 .env 文件
- 或使用系统环境变量
相关需求: B-2 (API key 环境变量)
2026-10-05 12:16:24 +08:00
22fd55b0ab
fix: 修复 LibraryView pose 过滤结构问题
...
**问题:**
- v-for 后的空 div 可能导致渲染问题
- 影响整个页面显示
**修复:**
- 使用 template + v-if 组合
- 避免创建多余的空 div
- 保持 TypeScript 类型安全
**测试:**
- 编译成功
- proxy 正常运行
- Library 页面应恢复正常
相关需求: A-8 (移除 pose)
2026-10-05 12:15:44 +08:00
7b83d987e4
fix: LibraryView 过滤 pose 显示(避免 HTML 结构问题)
...
**修改方法:**
- 使用嵌套 div + v-if 过滤 pose
- 避免使用 template 标签(可能导致结构问题)
**修改位置:**
- Line 353-357: processor output 过滤 pose
- Line 555: QC 检查移除 POSE
**原因:**
- pose 已从 pipeline 移除 (A-8)
- 之前的方法可能导致 HTML 结构问题
**过滤逻辑:**
```vue
<div v-for="(info, proc) in processors">
<div v-if="proc !== 'pose'">
<!-- 显示内容 -->
</div>
</div>
```
相关需求: A-8 (移除 pose)
2026-10-05 11:58:06 +08:00
8758255eee
feat: LibraryView 补全 stage 名称映射
...
**添加内容:**
- 添加 moment_chunks 到 formatStageName 映射
- 返回 'Moment Chunks' 作为显示名称
**Core API Stages 完整列表:**
- processors: Processors (weight: 0.30)
- rule1_ingestion: Rule1 Ingestion
- face_tracing: Face Tracing
- face_dedup: Face Dedup
- tkg_nodes: TKG Nodes
- tkg_edges: TKG Edges
- rule2_ingestion: Rule2 Ingestion
- vlm_summary: VLM Summary (weight: 0.04)
- moment_chunks: Moment Chunks (weight: 0.01)
**前端处理:**
- ✅ 直接使用 API 返回的 overall_progress
- ✅ 直接使用 API 返回的 stages[].weight
- ✅ 直接使用 API 返回的 stages[].progress
- ✅ 无前端权重计算
**API Endpoint:**
- GET /api/v1/pipeline-progress/:file_uuid
- 返回 PipelineProgress 结构
参考文件:
- Core: /Users/accusys/momentry_core/src/core/progress.rs:42-111
- API: /Users/accusys/momentry_core/src/api/scan.rs:1254
2026-10-05 05:03:31 +08:00
ed971c5f98
fix: LibraryView 移除 pose 相关代码
...
**移除内容:**
- 移除 pose 处理器选项(Line 305-310)
- 移除 procPose 变量定义(Line 1055)
- 移除 selectedProcessors 中的 procPose(Line 1142)
- 移除 processors 列表中的 'pose'(Line 1348, 1408)
**原因:**
- pose 已从 pipeline 移除(A-8)
- 无需在 Library 卡片中显示
**后续:**
- 待确认 VLM Summary 和 moment_chunks 是否需要合并
- 待确认百分比是否需要重新配置
相关需求: A-8 (移除 pose)
2026-10-05 04:57:25 +08:00
0bd71ab3f0
fix: 真正移除 Studio proxy 和 main 硬编码路径
...
**proxy.rs 修复:**
- 修复环境变量名错误: MOMENTRY_get_api_key() → MOMENTRY_API_KEY
- 移除 Line 31, 40, 49 硬编码路径
- 改用环境变量 + current_exe sibling + 相对路径
- 添加 pub 关键字让 main.rs 可以使用
**main.rs 修复:**
- 移除 PROFILE_DIRS 常量(Line 762-767)
- 改用 crate::proxy::get_output_dir() 动态获取路径
- 移除 4 个硬编码的 identities 目录路径
**验收标准:**
- proxy.rs: ✅ 无硬编码路径
- main.rs: ✅ PROFILE_DIRS 已移除
- main.rs: ⚠️ start_service/stop_service 仍有硬编码(开发工具,可排除)
**遗留问题:**
- 编译错误: SystemStatsResponse 导入问题(已存在,非本次修改引入)
- 需要 Studio Team 后续修复
相关需求: B-1 (移除 proxy 硬编码路径)
2026-10-04 20:08:29 +08:00
40b804c0d1
feat: PeopleView 统一使用 Core thumbnail 端点
...
- 影格显示改用 Core 端点 /api/v1/file/:uuid/thumbnail?frame=N
- 与 key_frame_url 保持一致(Line 3580 已使用 Core 端点)
- 测试确认两个端点都可工作:
* Core 端点:/api/v1/file/:uuid/thumbnail?frame=N (62KB)
* Proxy 端点:/api/v1/media/frame?file_uuid=...&frame=... (119KB)
- 选择 Core 端点原因:
1. 统一端点风格(与 key_frame_url 一致)
2. 更小的文件大小(可能是优化后的缩略图)
3. 通过 fallback_handler 转发到 Core API
相关需求:B-3 (PeopleView 影格端点选择)
2026-10-04 15:15:45 +08:00
26ac0e90df
fix: 完成 B-1, B-2, B-4(proxy 硬编码移除 + re-scan 端点)
...
B-1: 移除 proxy 硬编码路径
- 移除 API_KEY 常量,改为 get_api_key() 从环境变量读取
- 移除 PROFILE_DIRS,改为 get_output_dir() 从环境变量读取
- 移除 output_bases (identity_matches, trace_profile),改为环境变量驱动
- 移除 ADMIN_CONFIG_PATH,改为 get_admin_config_path() 从环境变量读取
- 添加 dev fallback 支持开发环境
B-2: API key 改为环境变量
- MOMENTRY_API_KEY 环境变量必须设置
- 未设置时会明确报错启动
B-4: 改用 re-scan 端点
- 简化 doReprocess 函数从 92 行减少到 32 行
- 改用单一 POST /api/v1/re-scan API
- 显式传 auto_pipeline: true
- 移除 unregister → register → process 手动串接
- 原子性操作,避免中间失败留下不一致状态
环境变量:
- MOMENTRY_API_KEY (必需)
- MOMENTRY_OUTPUT_DIR (可选,默认 /Users/accusys/momentry/output)
- MOMENTRY_DATA_DIR (可选,默认 /Users/accusys/momentry/data)
- MOMENTRY_ADMIN_CONFIG (可选,默认 /Users/accusys/momentry/config/admin_config.json)
2026-10-04 15:00:45 +08:00
633406346b
fix: 禁止浏览器自动翻译页面
...
- 添加 <meta name="google" content="notranslate">
- 在 <html> 标签添加 translate="no" 属性
- 防止浏览器自动翻译导致显示混乱
- 保持产品名称和 UI 的原始英文显示
2026-10-02 06:08:28 +08:00
f96ba33c7a
fix: 保持产品名称和标语使用英文
...
- 添加 app.productName 和 app.tagline 翻译键
- 所有语言文件中都保持英文
- SearchView 使用翻译函数显示
- 确保不会被错误翻译
2026-10-02 06:02:10 +08:00
1bc53ae584
fix: AdminView 保存配置前先加载现有数据
...
- 避免空对象覆盖数据库中的现有配置
- 保存前先 GET 当前配置
- 合并修改的字段后再 POST
- 确保所有字段都正确保存
2026-10-02 05:42:31 +08:00
4eb423e424
fix: AdminView 确保 search config 正确保存
...
- 添加默认值处理
- vlm_min_score: 默认 0.0
- vlm_max_results: 默认 5
- vlm_output_language: 默认 'en'
- 修复空字符串导致保存失败的问题
2026-10-02 05:39:37 +08:00
51ded78f90
fix: PeopleView 强制使用最小过滤参数显示所有 faces
...
- 设置 ffMinConfPct = 0 (min confidence)
- 设置 ffMinSizePx = 0 (min size)
- 设置 ffMinQuality = 0 (min quality)
- 忽略 file profile 和 admin config 的过滤值
- 确保所有 face groups 和 unassigned faces 都能显示
2026-10-01 12:21:02 +08:00
28dfd3255d
fix: PeopleView 从 cluster 数据提取 trace_ids 和 representative_trace
...
- 构建 faceIdToTraceId 映射
- 从 representative_face.face_id 找到 trace_id
- 为每个 cluster 设置 trace_ids 字段
- 设置 representative_trace 字段
- 修复 group 缩略图无法显示的问题
2026-10-01 11:22:44 +08:00
fef3b892d6
fix: 使用正确的 face_cluster API 端点
...
- 改用 POST /api/v1/file/:uuid/json/face_cluster
- 替换旧的 GET /api/v1/cluster-results
- 返回正确的 cluster 数据:status, clusters, frames
- 修复 face dedup 按钮无法工作的问题
- 添加 get_file_processor_json API (通用端点)
2026-10-01 11:10:44 +08:00
f3d75ebce8
feat: Library 批量注册 + PeopleView 修复 + 国际化
...
Library:
- 添加 checkbox 和鼠标框选功能
- Unregistered 卡片添加快速注册按钮
- 状态标签移至左下方,人脸图标移至左侧中间
- Deep Scan 改为 unregister -> register -> process
- 完整国际化(日语、繁体中文、英语)
PeopleView:
- 修复卡片不显示问题(使用 get_file_traces API)
- 移除对 identity_id 字段的依赖
其他:
- 添加日语语言包
- 添加 useDragSelect composable
- 新增文档:Face Bbox Null Bug Report
2026-10-01 00:42:13 +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
97a5fef0b2
fix: createNewGroupAndMove should rename trace profiles, not create identity
...
Changed from apiCall('create_identity_from_face') to updateTraceProfileGroup(name).
This correctly creates a new face group by renaming trace_profiles.name
instead of trying to register a global identity.
2026-08-01 05:55:33 +08:00
beea6b1c35
fix: moveToGroup should rename traces, not merge them
...
Changed from apiCall('merge_trace', ...) to updateTraceProfileGroup(name=targetGroup.name).
This just changes the trace profile name to join the target group,
without actually merging trace data together.
2026-08-01 05:50:10 +08:00
1c0f15664e
fix: batchDeleteGroups should ungroup (rename to Unassigned), not hard delete
...
Changed from apiCall('delete_trace', ...) to updateTraceProfileGroup(name='Unassigned').
This preserves all trace data and just removes the group assignment.
Traces move back to Pending Faces instead of being deleted.
2026-08-01 05:40:46 +08:00
adc8d944c6
perf: use direct trace-thumb endpoint + fallback for face group thumbnails
...
- loadTraceThumb now uses /api/v1/trace-thumb/{uuid}/{tid} (~8ms)
- Face group imgs use direct trace-thumb URL with fallback
- Merge dialogs also use direct trace-thumb with fallback
- MAX_CONCURRENT increased to 32
Fallback chain:
1. c.rep_trace.file_uuid/trace_id (full trace data)
2. selectedFileUuid/representative_trace (group data only)
3. SVG silhouette
2026-08-01 05:29:55 +08:00
5be57aec7d
Revert "perf: lazy load face group thumbnails + increase concurrency to 32"
...
This reverts commit 26b94f7243 .
2026-08-01 01:58:01 +08:00