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 影格端点选择)
This commit is contained in:
2026-10-04 15:15:45 +08:00
parent 26ac0e90df
commit 40b804c0d1

View File

@@ -242,7 +242,7 @@
<div v-for="trace in filteredUnassignedTraces" :key="`${trace.trace_id}-${trace.file_uuid}`" class="ms-ppl-face-card" :class="{ 'ms-ppl-face-card-selected': isFaceSelected(trace) }" :data-drag-key="`${trace.file_uuid}:${trace.trace_id}`" @click="openFaceDetailFromTrace(trace)" v-observe="() => loadTraceThumb(trace)">
<div class="ms-ppl-face-img-wrap">
<template v-if="activeFrameCard === `${trace.trace_id}-${trace.file_uuid}`">
<img :src="`/api/v1/media/frame?file_uuid=${trace.file_uuid}&frame=${trace.best_face_frame ?? trace.start_frame ?? 0}`" alt="Key Frame" class="ms-ppl-frame-img">
<img :src="`/api/v1/file/${trace.file_uuid}/thumbnail?frame=${trace.best_face_frame ?? trace.start_frame ?? 0}`" alt="Key Frame" class="ms-ppl-frame-img">
<div v-if="activeFrameMode === 'bbox' && trace.best_face_bbox" class="ms-ppl-bbox-overlay" :style="{
left: (trace.best_face_bbox.x / (fileInfoCache[trace.file_uuid]?.width || 1) * 100) + '%',
top: (trace.best_face_bbox.y / (fileInfoCache[trace.file_uuid]?.height || 1) * 100) + '%',
@@ -2448,7 +2448,7 @@ async function openFaceDetailFromTrace(t: any) {
const frame = t.best_face_frame !== undefined && t.best_face_frame !== null ? t.best_face_frame : (t.start_frame || 0)
if (t.file_uuid && frame !== undefined && frame !== null) {
faceDetailFrameUrl.value = `/api/v1/media/frame?file_uuid=${t.file_uuid}&frame=${frame}`
faceDetailFrameUrl.value = `/api/v1/file/${t.file_uuid}/thumbnail?frame=${frame}`
try {
const fileInfo: any = await apiCall('get_file_info', { uuid: t.file_uuid })