剩余额度:{{ formatQuotaGb(user?.remaining_quota_gb) }} 代入模式 标签:{{ user.company_tag }} {{ user?.username }}

登录

欢迎回到 TachinData 视频预处理平台

没有账号?

注册

创建您的 TachinData 账号

已有账号?

我的任务

按日期一键下载分段 ZIP

超过 20 个任务会自动拆分为多个 ZIP 分包下载,单包失败可重试。
快捷选择(当前页已完成任务日期):
已选: {{ d }}

最近导出

日期包保留 1 天,任务和单分段包保留 7 天,超时将自动删除。
显示:
正在加载导出列表...
当前筛选下暂无导出记录
{{ item.filename || '-' }} {{ exportStatusLabel(item.status) }} {{ exportTypeLabel(item.export_type) }}
创建时间:{{ formatTime(item.created_at) }} 更新时间:{{ formatTime(item.updated_at) }} 过期时间:{{ formatTime(item.expires_at) }}
{{ item.error_message }}
下载

暂无任务

{{ taskFilter ? '当前筛选下没有任务' : '点击"上传数据"开始处理' }}

{{ getStatusIcon(task.status) }}
#{{ task.task_number }} {{ task.video_name }}
{{ getStatusBadge(task.status).text }}  {{ taskStepText(task) }} [{{ stageLabel(task.failed_stage) }}]
{{ taskProgress(task) }}% {{ task.slice_count }} 片段
共 {{ taskTotal }} 条,第 {{ taskPage }} / {{ taskTotalPages }} 页(每页 20 条)

上传原始数据

支持两种业务模式:视频+触觉(1个mp4 + 2个npz_enc + meta_data.json)与纯触觉(2个npz_enc + meta_data.json)。 每种模式都支持逐组上传与文件夹批量上传。

点击选择文件夹

每个子文件夹应包含: 1个 .mp4 + 2个 .npz_enc 文件 + meta_data.json

每个子文件夹应包含: 2个 .npz_enc 文件(左手/右手)+ meta_data.json

已识别 {{ folderGroups.length }} 组数据

网络或 VPN 切换后若一直续传失败,可先清理本地断点续传记录,再重新上传。
{{ g.folderName }}
视频: {{ g.video?.name || '缺失' }} | 左手: {{ g.left?.name || '缺失' }} | 右手: {{ g.right?.name || '缺失' }} | 元数据: {{ g.meta?.name || '无' }}
{{ g.uploadDetail }}
{{ g.uploadStatus === 'uploading' ? '上传中' : g.uploadStatus === 'creating' ? '创建任务中' : g.uploadStatus === 'success' ? '已创建任务' : g.uploadStatus === 'failed' ? '失败' : g.uploadStatus === 'incomplete' ? '不完整' : '就绪' }}
{{ uploadStatusText }}
任务组 {{ uploadGroupIndex + 1 }} / {{ uploadGroupTotal }} | 文件 {{ uploadFileIndex + 1 }} / {{ uploadFileTotal }}
{{ uploadTotalProgress }}% {{ uploadFileName }}

#{{ selectedTask.task_number }} {{ selectedTask.video_name }}

{{ getStatusBadge(selectedTask.status).text }}
{{ taskStepText(selectedTask) }} {{ taskProgress(selectedTask) }}%

管道阶段

{{ stageLabel(s.stage) }}
{{ stageStatusLabel(s.status) }} (重试 {{ s.retry_count }}) · {{ stageDurationText(s, selectedTask.status) }}
{{ s.error_message }}
任务ID{{ selectedTask.id }}
任务序号{{ selectedTask.task_number }}
文件大小{{ formatSize(selectedTask.file_size) }}
切片数量{{ selectedTask.slice_count || '-' }}
创建时间{{ formatTime(selectedTask.created_at) }}
更新时间{{ formatTime(selectedTask.updated_at) }}
完成时间{{ formatTime(selectedTask.completed_at) }}
错误信息{{ selectedTask.error_message }}
失败阶段{{ stageLabel(selectedTask.failed_stage) }}
{{ downloadStatusText || '正在获取下载链接...' }}

下载文件

压缩视频: 下载
任务总包: 下载
全局文件:
分段文件:
分段 {{ segIdx }}
ZIP 预生成中... 下载预生成ZIP

视频理解分析结果

{{ prettyJson(selectedTask.qwen_result_json) }}

管理控制台

{{ stats.total_users }}
注册用户
{{ stats.total_tasks }}
总任务数
{{ stats.pending_tasks + stats.processing_tasks }}
进行中
{{ stats.completed_tasks }}
已完成
{{ stats.failed_tasks }}
失败

基础设施快照

{{ nodeOverview.summary.temporal_workers_online }}/{{ nodeOverview.summary.temporal_workers_total }}
Temporal Worker(在线/总数)
{{ nodeOverview.summary.task_queues_with_pollers }}/{{ nodeOverview.summary.task_queues_total }}
Task Queue(有轮询/总数)
{{ nodeOverview.services?.overall === 'ok' ? '正常' : '降级' }}
本实例 API
{{ nodeOverview.summary.api_peers_healthy }}/{{ nodeOverview.summary.api_peers_total }}
API 集群(健康/总数)

管道实时统计

管道 运行中 成功 失败 重试中 等待中
{{ stageLabel(s.stage) }} {{ s.running }} {{ s.success }} {{ s.failed }} {{ s.retrying }} {{ s.pending }}

失败任务

#{{ task.task_number }} {{ task.video_name }}
{{ stageLabel(task.failed_stage) }} {{ task.error_message }}

暂无失败任务

用户管理

用户名邮箱角色状态 公司标签 剩余额度(GB) 进行中已完成失败总计 注册时间操作
{{ u.username }} {{ u.email }} {{ u.is_admin ? '管理员' : '普通' }} {{ u.is_active ? '正常' : '禁用' }} {{ u.company_tag || '-' }}
{{ u.active_task_count }} {{ u.completed_task_count }} {{ u.failed_task_count }} {{ u.task_count }} {{ formatTime(u.created_at) }}

注册码管理

{{ item.code }}
角色:{{ item.role === 'admin' ? '管理员' : '用户' }} | 标签:{{ item.company_tag || '-' }} | 状态:{{ item.is_used ? '已使用' : '未使用' }}

基础设施总览

更新时间:{{ formatTime(nodeOverview.generated_at) }}
{{ nodeOverview.summary?.temporal_workers_online || 0 }}/{{ nodeOverview.summary?.temporal_workers_total || 0 }}
Temporal Worker(在线/总数)
{{ nodeOverview.summary?.task_queues_with_pollers || 0 }}/{{ nodeOverview.summary?.task_queues_total || 0 }}
Task Queue(有轮询/总数)
{{ (nodeOverview.platform_nodes || []).length }}
平台执行节点(Lease)
{{ (nodeOverview.inference_nodes || []).length }}
推理节点(已注册)

本实例 API 与依赖

实例 ID {{ nodeOverview.services.api_instance?.instance_id }}
部署角色 {{ nodeOverview.services.api_instance?.deploy_role || 'api' }}
监听地址 {{ nodeOverview.services.api_instance?.listen_addr }}
整体状态 {{ nodeOverview.services.overall === 'ok' ? '正常' : '降级' }}
数据库 {{ nodeOverview.services.api_instance?.database }}
Redis {{ nodeOverview.services.api_instance?.redis }}
Temporal {{ nodeOverview.services.api_instance?.temporal }} {{ nodeOverview.services.api_instance?.temporal_address }}

LB 后端 API 节点

节点地址保存在数据库(RDS),在此增删改查;健康检查通过各实例 /health 探测。

名称 地址 启用 健康 版本 延迟(ms) DB / Temporal 操作
{{ row.probe.healthy ? '正常' : '异常' }} {{ row.probe?.version || '—' }} {{ row.probe?.latency_ms ?? '—' }} {{ row.probe.detail.database }} / {{ row.probe.detail.temporal }} {{ row.probe?.error || '—' }}
暂无 API 节点,请添加

Temporal Task Queue

队列 轮询器 在线轮询 积压 可达
{{ q.name }} {{ q.pollers || 0 }} {{ q.online_pollers || 0 }} {{ q.backlog || 0 }} {{ q.reachable !== false ? '是' : '否' }}

平台执行节点(Lease)

节点ID 运行任务数 过期Lease 最近心跳 状态分布
{{ n.node_id }} {{ n.running_tasks }} {{ n.stale_leases || 0 }} {{ formatTime(n.latest_heartbeat_at) }} {{ status }}: {{ count }}
暂无运行中的平台执行节点

Temporal Worker 状态

V2 使用 Temporal 调度;需运行 go run ./cmd/worker 且 API 能连上 Temporal。

Worker 标识 在线 最近轮询 Task Queue
{{ w.worker_name }} {{ w.online ? '在线' : '离线' }} {{ formatTime(w.last_access_at) }} {{ (w.queue_names || []).join(', ') || '-' }}
未发现 Temporal Worker。请确认 Temporal 已启动且 Worker 进程在运行。

推理节点健康

名称 地址 健康 队列 处理中 待处理
{{ s.name || '-' }} {{ s.url }} {{ s.healthy ? '正常' : '异常' }} {{ s.queue_size || 0 }} {{ s.processing_tasks || 0 }} {{ s.pending_tasks || 0 }}

系统日志

{{ formatTime(log.created_at) }} [{{ logLevelText(log) }}] {{ log.source || 'unknown' }}: {{ log.message || '' }} ({{ log.task_id.substring(0,8) }})
暂无日志

推理服务器状态

{{ srv.name || srv.url }}
{{ srv.url }}
离线: {{ srv.error }}
队列: {{ srv.queue_size || 0 }} | 处理中: {{ srv.processing_tasks || 0 }} | 待处理: {{ srv.pending_tasks || 0 }}
原始状态 JSON
{{ prettyJson(srv.raw_status) }}

未配置推理服务器

{{ toastMsg }}