Commit Graph

150 Commits

Author SHA1 Message Date
969b4d85ef fix: suppress 404 errors for optional MBE models endpoint and defer user loading
- loadMbeModels no longer logs console.error for 404 (endpoint may not exist)
- loadUsers removed from onMounted - only called after admin login
- Prevents 401 errors on page load before user has authenticated
- Users tab now only loads data after successful login
2026-10-27 02:32:54 +08:00
1caca73614 feat: integrate settings validation API before saving upload path
- saveUploadPath now validates path via POST /api/v2/settings/validate
- Shows clear error message if path doesn't exist or isn't writable
- Only saves if validation passes (valid: true)
- 5 validation checks: format, existence, type, read/write permissions
2026-10-27 02:28:49 +08:00
3b638f0416 feat: integrate MarkBase Admin API with Bearer token authentication
- Added useAdminAuth composable for login/logout/token management
- Admin Users tab now requires login before showing users
- loadUsers/loadShares now use direct fetch with Bearer token
- Added login form with username/password fields
- Token stored in localStorage with expiry check
- Default credentials: demo/demo123
2026-10-27 02:17:41 +08:00
4129c174ed feat: integrate MarkBase Settings API (GET/POST /api/v2/settings)
- Replaced deprecated /api/v2/config with new /api/v2/settings
- loadSettings() now uses GET /api/v2/settings (structured JSON)
- saveUploadPath() now uses POST /api/v2/settings
- Removed PostgreSQL migration error handling (no longer needed)
- Settings page now works correctly with SQLite-only MarkBase
2026-10-27 02:06:57 +08:00
cb2b6a0292 fix: show clear error message when MarkBase needs restart (PostgreSQL→SQLite migration)
- Detects 'missing field postgresql' error from MarkBase config endpoint
- Shows user-friendly message: 'MarkBase needs restart (PostgreSQL→SQLite migration)'
- Helps users understand the error is due to outdated MarkBase instance
2026-10-27 01:41:07 +08:00
052178b084 fix: improve Settings page error message for MarkBase config failures
- loadSettings now shows detailed error from MarkBase response body
- MarkBase /api/v2/config returns 500 when config file is incomplete
- Error message now includes actual error details instead of just HTTP status
2026-10-27 01:27:34 +08:00
388c548e4a feat: multi-language support for agent search and admin pipeline config
- search_agents now accepts output_language parameter (en/zh-TW/ja)
- Admin Settings: added Pipeline Configuration section (enabled, max_concurrent_stages, default_timeout_secs)
- Admin Settings: search config now includes vlm_output_language dropdown
- Added translations for pipeline config in en/zh-TW/ja locales
- Agent search uses searchConfig.vlm_output_language for output language
2026-10-27 01:18:19 +08:00
fa7a9e1084 fix: Admin Panel health checks work via reverse proxy
- loadServiceUrls: use window.location.origin for remote access, localhost for local dev
- testCoreApi: use /api/v1/health for remote, /health for localhost
- testProxy: health check path works for both
- testMbe: already uses getApiBase() which handles both cases

This fixes the issue where Admin Panel showed offline when accessed via
https://nextorage.momentry.ddns.net because localhost health checks
point to user's machine, not the server.
2026-10-23 21:35:29 +08:00
6db184c7d0 feat: export marked results with VLM data and tags
- toggleMark now captures vlm_description, vlm_description_localized, vlm_tags, vlm_objects, thumbnail_url
- exportMarked generates structured JSON with vlm section containing en/localized descriptions and tags
- Export filename changed to vlm-marked-export-{timestamp}.json
- Includes source_type, scene_index, trace_id for complete result metadata
2026-10-23 18:15:38 +08:00
fa8e4a9191 fix: simplify bilingual VLM search - use single API call
- Core API now returns both vlm_description (EN) and vlm_description_localized (JA)
- Removed duplicate API calls (was fetching EN + JA separately)
- Single API call with output_language param, uses both fields from response
- Load More also updated to use results array and correct field names
- Format: 【JA】localized text...【English】english text...
2026-10-23 04:59:55 +08:00
76d9afd43b fix: use vlm_description_localized field name from Core API
- Changed vlm_description_lang to vlm_description_localized
- Core API outputs vlm_description (EN) + vlm_description_localized (JA)
- Frontend shows localized first: 【JA】...【English】...
2026-10-23 04:56:56 +08:00
1ffceaba26 fix: search visual cards show localized language first (JA before EN)
- Bilingual format: 【JA】... then 【English】...
- Summary uses localized language (vlm_description_lang) as primary
- Load More function now also supports bilingual format
- Fallback: only vlm_description shows single language without labels
2026-10-23 04:41:15 +08:00
342d4e33b8 fix: Admin panel always uses localhost URLs for service health checks
- Removed isLocalhost checks from loadServiceUrls()
- All services now default to http://localhost:XXXX
- Health check URLs always use direct paths (/health)
- Fixes Core API and Proxy showing offline from external URL
2026-10-23 02:22:28 +08:00
6e0e306082 fix: optimize MBE start flow - skip redundant frontend polling
- Backend already polls 60s for MBE port readiness
- Frontend no longer polls 30s after backend returns
- Total wait time: ~60s instead of ~90s
- Start timeout set to 60s for MBE
2026-10-23 01:31:50 +08:00
951a2964f3 feat: add MBE health check proxy endpoint
- Added /api/v1/mbe/health proxy in Studio proxy (port 8888)
- Frontend now uses proxy endpoint instead of direct mbeUrl
- Works for both localhost and external access (once proxy is deployed)
- MBE health response: {status: 'healthy', model: 'e4b', layers: 42}
2026-10-22 23:52:23 +08:00
a429aca344 fix: accept MBE 'healthy' status and show model info
- Updated testMbe() to accept status='healthy' from MarkBaseServer
- Added model and layers info to mbeInfo display
- MBE now shows 'MBE (e4b)' instead of generic 'MarkBaseEngine'
2026-10-22 21:55:52 +08:00
2cff332d55 feat: fix MBE health check and add model selection dropdown
- Fixed testMbe() to always use /health instead of /v1/health
- Added model selection dropdown for MarkBaseEngine
- Modified startService('mbe') to pass model and port parameters
- Added loadMbeModels() to fetch available models on mount
- Added getApiBase import
2026-10-22 21:40:47 +08:00
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