fc32fb0f86
fix: full file playback and file name display
...
- Use endFrame=999999 for full file playback (backend clips correctly)
- Add z-index:10 to card-file-info to prevent being obscured
- Full file now plays complete duration
2026-10-20 22:26:38 +08:00
971cfe50f5
feat: add clickable file name bar with full-file playback
...
- Add card-file-info bar at top of search result cards
- Click file name to play full file (startFrame: 0, endFrame: 0)
- Show video/document icon based on file extension
- Display file UUID badge
- Remove duplicate card-file section from bottom of card
2026-10-20 22:01:53 +08:00
c425c29d01
feat: persist search session across page navigation
...
- Save messages to localStorage when leaving search page
- Restore messages when returning to search page
- Clear session on newChat()
- Session includes: messages, conversationId, fileUuidCache, mode
2026-10-20 18:06:52 +08:00
ca569f3e5c
fix: re-scan now shows status update immediately
...
Root cause: finally block called loadFiles() which cleared the cache
and reloaded from server, overwriting the manual 'scanning' status.
Server videos.status may not be synced yet by PostgreSQL trigger.
Fix: Remove loadFiles() from finally block. Keep manual status update.
Polling mechanism will sync status from server automatically.
2026-10-18 23:43:45 +08:00
7f6db1a387
debug: add console.log to re-scan flow
...
- Added logging to ctxReprocess, doReprocess
- Log API call and response for debugging
- Check if reprocessing flag is blocking the action
2026-10-18 23:21:28 +08:00
5e0eac6700
fix: allow re-scan for paused files
...
- Added Rescan button for paused files in context menu
- Re-scan now removes file from paused set
- Paused files can be re-scanned directly without resuming first
2026-10-18 23:13:44 +08:00
ef45cd53df
feat: add paused status count to library status bar
...
- Added pausedCount computed property
- Added ⏸ Paused N to status bar between Scanning and Completed
- Paused count displayed in warning color (yellow) to distinguish from Scanning
2026-10-18 22:59:13 +08:00
46c0a6ff64
fix: show Resume button instead of Deep Scan for paused files
...
- Deep Scan button hidden when status is 'paused'
- Resume button shows when status is 'paused'
- Pause button shows when status is 'scanning'
- Simplified conditions: no longer need isFilePaused check in template
2026-10-18 22:50:47 +08:00
ed15f4c3e7
refactor: use PostgreSQL trigger for status sync instead of manual cache update
...
Core Team implemented PostgreSQL trigger (sync_video_status) that automatically
syncs videos.status when monitor_jobs.status changes. Removed frontend workaround
that manually updated filesCache/fileStatusCache.
Now ctxPause/batchPause call loadFiles() + loadPausedFiles() after success
to get the properly synced status from backend.
2026-10-18 22:14:19 +08:00
a64e200ca5
fix: pause/resume now manually updates file status in cache
...
Root cause: backend pause updates monitor_jobs table, but frontend
displays status from videos table (via get_files API). These are separate.
Fix:
- ctxPause: manually sets file.status = 'paused' in filesCache + fileStatusCache
- batchPause: same manual cache update for each file
- ctxResume/batchResume: calls loadFiles() to refresh from backend
- Added console.log debug for troubleshooting
- Fixed i18n: removed duplicate emoji from translation strings
2026-10-18 21:38:47 +08:00
67e806037f
fix: pause/resume now reloads files to update status badge
...
- ctxPause and ctxResume now call loadFiles() + loadPausedFiles()
- batchPause and batchResume also reload after completion
- Use new Set() for proper Vue reactivity
- Fixes status badge not updating after pause
2026-10-18 21:13:39 +08:00
4e90f832d9
feat: add pause/resume to library context menu and batch operations
...
- Add pause/resume buttons to file context menu (right-click)
- Add batch pause/resume buttons to section titles
- Support concurrent pause/resume with pLimit(3)
- Add paused status badge (⏸) with warning color
- Integrate with Core API /api/v1/jobs/:uuid/pause|resume
- Track paused files via Redis jobs:paused set
- Add i18n translations (zh-TW, en)
2026-10-18 21:09:05 +08:00
f298626487
feat: 实现四阶段进度显示
...
问题:
- 当前进度显示使用旧的处理器列表
- 显示了所有独立的处理步骤,而不是分阶段
解决方案:
- 将处理步骤聚合到四个主要阶段
- 实现阶段级进度计算
- 更新阶段名称显示
四阶段结构:
1. Processors (30%)
- 包含所有处理器 (ASR, FACE, OCR, etc.)
2. Knowledge Graph (35%)
- tkg_nodes
- tkg_edges
3. Moment Extraction (6%)
- vlm_summary
- scene_vlm
- moment_chunks
4. Integration (29%)
- rule1_ingestion
- rule2_ingestion
- face_tracing
- face_dedup
实现细节:
- loadPipelineStats() 中添加阶段聚合逻辑
- 根据步骤权重计算阶段进度
- 根据步骤状态确定阶段状态
- formatStageName() 更新阶段名称映射
进度计算:
- 阶段进度 = 加权平均步骤进度
- 阶段状态 = 优先级: failed > completed > running > pending
- 总体进度 = 加权阶段进度之和
显示效果:
- ✗ Processors: 0%
- ✓ Knowledge Graph: 100%
- ✗ Moment Extraction: 33%
- ✗ Integration: 50%
优势:
- 更清晰的阶段划分
- 更好的进度概览
- 更符合实际处理流程
2026-10-14 20:23:42 +08:00
b1ef9b19fa
fix: 修复 loadMore 重复结果问题
...
问题:
- Visual 搜索使用 page 参数导致返回重复结果
- 所有模式缺少与现有结果的去重逻辑
- Agent 模式没有实现 loadMore 支持
修复:
1. ✅ 实现 existingIds 去重机制
- 使用 file_uuid:start_frame:source_type 作为唯一标识
- 在追加新结果前检查是否已存在
2. ✅ 修复 Visual 搜索分页
- 将 page 参数改为 offset 参数
- 确保每次加载不同的结果
3. ✅ 添加 Agent 模式 loadMore 支持
- 使用 semantic search 作为 fallback
- 实现去重逻辑
4. ✅ 优化分页参数
- Keyword/Semantic: limit: 15, offset: nextOffset
- Visual: page_size: 10, offset: nextOffset
- People: limit: 10, offset: nextOffset
- Agent: fallback 到 Semantic
技术细节:
- existingIds Set 存储已显示结果的 ID
- globalKey 确保跨模式去重
- 减小 limit 值提高性能
效果:
- ✅ More 按钮现在返回不同的结果
- ✅ 无重复卡片
- ✅ 支持所有 5 种搜索模式
2026-10-11 22:07:06 +08:00
cf498dc4d3
feat: 添加搜索分页功能(More 按钮)
...
功能:
- ✅ 初始搜索显示 5 条结果(快速响应)
- ✅ More 按钮追加 10 条结果(渐进式加载)
- ✅ 支持所有搜索模式(Keyword, Semantic, Visual, Agent, People)
- ✅ 显示剩余结果数量
- ✅ 加载动画和禁用状态
技术实现:
- 添加分页状态: sessionId, hasMore, nextOffset, totalResults, loadingMore
- 实现 loadMore() 函数
- 修改 sendMessage() 支持分页(limit: 5)
- 添加 More 按钮 UI 和样式
性能改进:
- 初始加载时间: ~2s → ~0.5s (预估)
- 内存占用: 渐进式加载
- 用户体验: 立即反馈
临时方案:
- 使用现有 API 实现
- 未实现 Session 管理(后续优化)
- 通过缓存查询参数实现分页
测试清单:
- [ ] Keyword 搜索分页
- [ ] Semantic 搜索分页
- [ ] Visual 搜索分页
- [ ] Agent 搜索分页
- [ ] People 搜索分页
- [ ] More 按钮显示/隐藏逻辑
- [ ] 性能验证
2026-10-11 21:48:04 +08:00
af60ea118a
feat: 添加 Scene VLM 阶段到 Pipeline Progress 显示
...
问题:
- Core API 新增 scene_vlm 阶段
- Studio 需要同步更新权重映射和显示名称
修复:
- 更新 WEIGHT_MAP,添加 scene_vlm (0.03)
- 调整 vlm_summary 权重从 0.04 到 0.03
- 更新 formatStageName 函数,添加 'Scene VLM' 显示名称
权重映射:
- processors: 0.30
- rule1_ingestion: 0.05
- face_tracing: 0.05
- face_dedup: 0.10
- tkg_nodes: 0.20
- tkg_edges: 0.15
- rule2_ingestion: 0.10
- vlm_summary: 0.03
- scene_vlm: 0.03
- moment_chunks: 0.01
影响:
- 文件处理流程显示 Scene VLM 阶段
- 深度扫描文件显示完整的处理进度
- 用户可以实时监控 Scene VLM 处理状态
测试:
✅ 编译通过 (npm run build)
✅ 阶段显示名称正确
2026-10-10 14:57:22 +08:00
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
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
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
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
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
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
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
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
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
26b94f7243
perf: lazy load face group thumbnails + increase concurrency to 32
...
- Add v-observe directive to face groups for lazy thumbnail loading
- Increase MAX_CONCURRENT from 16 to 32 for faster parallel loading
- Apply lazy loading to merge dialogs and candidate groups
- Only load thumbnails when cards become visible (IntersectionObserver)
Improves initial load time for Charade (153 groups, 2451 traces) from
~76s to <5s for visible groups.
2026-08-01 01:49:45 +08:00
9d58fdb9d9
fix: unregister timeout 200s + async mode
...
- Add UNREGISTER_TIMEOUT=200000 (200s) for large file unregister
- Add timeout field to buildHttpRequest return type
- httpCall now uses per-request timeout override
- unregister_file now uses asyncMode: true for better UX
- Show "Removing in background..." toast for async mode
Fixes timeout error when unregistering large files (83K faces, 20K nodes).
2026-07-31 18:32:50 +08:00
1a0b3f2c1f
fix: use search/people API (no identity concept)
2026-07-25 20:38:30 +08:00
9386a8e8ef
fix: fallback to search_identities (search/people endpoint not deployed)
2026-07-25 20:35:47 +08:00