Commit Graph

25 Commits

Author SHA1 Message Date
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
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
f96ba33c7a fix: 保持产品名称和标语使用英文
- 添加 app.productName 和 app.tagline 翻译键
- 所有语言文件中都保持英文
- SearchView 使用翻译函数显示
- 确保不会被错误翻译
2026-10-02 06:02:10 +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
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
fb9a55a64c feat: use new search/people API for People search mode 2026-07-25 20:33:15 +08:00
660f01c6c5 fix: People search mode label 2026-07-25 19:27:56 +08:00
cb7ebfb633 feat: add Face Group search mode back to SearchView
- Add 'Face Group' mode to search modes
- Use search_identities API temporarily
- Update summary: 'Identity' → 'FS'
- Will replace with Core Team's search_tkg_node_face_trace_profile API
2026-07-25 19:24:54 +08:00
38b993938b feat: integrate ASRX/OCR/Face display into VideoPlayer callers
SearchView:
- Enable ASRX subtitle + OCR bbox
- show-asrx='true', show-ocr='true'

PeopleView/PersonDetailView:
- Enable Face bbox (existing allTraces)
- show-face='true'

LibraryView:
- Keep simple mode (no processor overlays)
2026-07-24 23:24:13 +08:00
c2901338e1 feat: enforce 100% frame-based positioning (no time)
Core Principle: Frame is the ONLY standard

Changes:
- VideoPlayer: Remove startTime/endTime props
- VideoPlayer: Add mandatory startFrame/endFrame check
- VideoPlayer: UI shows F123 (51.2s) format
- All Views: Only set startFrame/endFrame
- All Views: Only pass :start-frame/:end-frame
- Remove all startTime/endTime from currentVideo refs

Time is only used for display (auxiliary).
Frame is the source of truth for all positioning.
2026-07-24 22:49:35 +08:00
1fd6312f7e fix: enforce frame-based positioning across all video playback
Core Principle: Frame is the only standard

Changes:
- VideoPlayer: Add startFrame/endFrame props
- VideoPlayer: Use frame parameters in simple playback path
- SearchView: Remove frame/time conversion (stop using fps = 24)
- PeopleView: Pass frames directly instead of time
- PersonDetailView: Pass frames directly instead of time

All video streams now use startFrame/endFrame API parameters.
Time conversion only happens in VideoPlayer internals for UI display.

Ref: frame-based positioning standards research
2026-07-24 21:17:11 +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
13924965f7 fix: extract results array from search_smart API response 2026-07-02 21:52:46 +08:00
22e24b13b7 feat: show text_content in search results for keyword search 2026-07-02 21:24:24 +08:00
98a3d79701 feat: add ASR status display in search results, fix unassigned traces param name 2026-06-27 11:41:03 +08:00
7855983dc1 feat: bind/unbind by id, video streaming proxy, unmute default, library refresh, hamburger click-outside
- Core API: bind/unbind accept id (integer PK) when face_id is null
- Tauri proxy: stream video responses instead of buffering for seek bar
- VideoPlayer: remove muted attribute, unmute by default
- LibraryView: call invalidateFiles() before ensureFiles() on register/unregister
- PeopleView: close sort panel on click-outside, not just hamburger toggle
- bind_face: prefer face_id, fallback to id when face_id is null
2026-06-18 22:24:03 +08:00
07d9ebda29 fix: Library thumbnail guard, Search People/Agent modes, People pagination debug 2026-06-14 20:34:36 +08:00
b8bd7c05be fix: Library isRegistered checkmark, Search add People+Agent modes 2026-06-14 20:26:48 +08:00
8af1f0408d fix: Search mode select dropdown + People debug log 2026-06-14 16:42:29 +08:00
a6a5add2f2 refactor: SearchView + PeopleView layout alignment with WordPress CSS 2026-06-14 14:07:29 +08:00
79e0a862d4 Initial commit: Momentry Studio v0.1.0 2026-06-13 17:49:02 +08:00