---
document_type: "implementation_guide"
service: "N8N"
title: "n8n Video RAG Demo - API 執行記錄"
date: "2026-03-22"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "demo"
  - "video"
  - "執行記錄"
ai_query_hints:
  - "查詢 n8n Video RAG Demo - API 執行記錄 的內容"
  - "n8n Video RAG Demo - API 執行記錄 的主要目的是什麼？"
  - "如何操作或實施 n8n Video RAG Demo - API 執行記錄？"
---

# n8n Video RAG Demo - API 執行記錄

| 項目 | 內容 |
|------|------|
| 建立者 | Warren |
| 建立時間 | 2026-03-22 |
| 文件版本 | V1.1 |
| 目標 | 完整執行 n8n Video RAG Workflow 並記錄所有 API 呼叫 |

---

## 版本歷史

| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
|------|------|------|--------|-----------|
| V1.0 | 2026-03-22 | 創建文件 | Warren | OpenCode |
| V1.1 | 2026-03-26 | 更新 API 範例，新增 X-API-Key 驗證標頭 | OpenCode | deepseek-reasoner |

---

## Phase 1: SFTPGo 準備

### Step 1.1: 取得 Demo User Token

**API 呼叫:**
```bash
curl -X GET "http://localhost:8080/api/v2/user/token" \
  -u "demo:demopassword123"
```

**Request:**
```
GET /api/v2/user/token
Authorization: Basic ZG9tbzpkZW1vcGFzc3dvcmQxMjM=
```

**Response (200 OK):**
```json
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_at": "2026-03-22T07:05:57Z"
}
```

**Token 有效期限:** 20 分鐘

**Session Token (Demo User):**
```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiQVBJVXNlciIsIjo6MSJdLCJleHAiOjE3NzQxNjMxNTcsImlhdCI6MTc3NDE2MTk1NywianRpIjoiZDZ2cDA5YWcyZnIwMnY3aTlybDAiLCJuYmYiOjE3NzQxNjE5NDcsInN1YiI6IjE3NzQxNjE5NTM0OTMiLCJ1c2VybmFtZSI6ImRlbW8ifQ.yw0UCv8sQXXCkOr7qmK2ejLzuoA8IDrmC9bpgFE4R_Q
```

**結果:** ✅ 成功

---

### Step 1.2: 上傳測試影片到 SFTPGo

**影片選擇:** `Old_Time_Movie_Show_-_Charade_1963.HD.mov` (2.3 GB)
- 路徑: `/Users/accusys/test_video/Old_Time_Movie_Show_-_Charade_1963.HD.mov`
- ASR Segments: 1,917 (已預處理)

**API 呼叫:**
```bash
TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
curl -X POST "http://localhost:8080/api/v2/user/files" \
  -H "Authorization: Bearer $TOKEN" \
  -F "path=/demo" \
  -F "mkdir_parents=true" \
  -F "filenames=@/Users/accusys/test_video/Old_Time_Movie_Show_-_Charade_1963.HD.mov"
```

**Request:**
```
POST /api/v2/user/files
Authorization: Bearer <token>
Content-Type: multipart/form-data

path: /demo
mkdir_parents: true
filenames: @/path/to/Old_Time_Movie_Show_-_Charade_1963.HD.mov
```

**Response (201 Created):**
```json
{"message":"Upload completed"}
```

**上傳統計:**
- 檔案大小: 2,361,629,896 bytes (2.3 GB)
- 上傳時間: 7 秒
- 平均速度: ~337 MB/s

**結果:** ✅ 成功

---

### Step 1.3: 建立分享連結

**API 呼叫:**
```bash
curl -X POST "http://localhost:8080/api/v2/user/shares" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Charade_1963_Demo",
    "paths": ["/Old_Time_Movie_Show_-_Charade_1963.HD.mov"],
    "scope": 1,
    "expires_at": 0
  }'
```

**Request:**
```json
POST /api/v2/user/shares
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "Charade_1963_Demo",
  "paths": ["/Old_Time_Movie_Show_-_Charade_1963.HD.mov"],
  "scope": 1,
  "expires_at": 0
}
```

**Response (200 OK):**
```json
{"message":"Share created"}
```

**結果:** ✅ 成功

---

### Step 1.4: 驗證上傳結果

**API 呼叫 - 列出分享:**
```bash
curl -X GET "http://localhost:8080/api/v2/user/shares" \
  -H "Authorization: Bearer $TOKEN"
```

**Response:**
```json
[
  {
    "id": "CjmQfrkXY5qDtC46WVZY2S",
    "name": "Charade_1963_Demo",
    "scope": 1,
    "paths": [
      "/Old_Time_Movie_Show_-_Charade_1963.HD.mov"
    ],
    "username": "demo",
    "created_at": 1774162072853,
    "updated_at": 1774162072853,
    "password": ""
  }
]
```

**分享連結:**
- Share ID: `CjmQfrkXY5qDtC46WVZY2S`
- Browse URL: `http://localhost:8080/web/client/pubshares/CjmQfrkXY5qDtC46WVZY2S/browse`

**本地目錄驗證:**
```
/Users/accusys/sftpgo_test/demo/
└── Old_Time_Movie_Show_-_Charade_1963.HD.mov (2,361,629,896 bytes)
```

**結果:** ✅ 成功

---

## Phase 2: Momentry 註冊

### Step 2.1: 健康檢查

**API 呼叫:**
```bash
curl -X GET "http://localhost:3002/health"
```

**Response:**
```
(待填寫)
```

---

### Step 2.2: 註冊影片

**API 呼叫:**
```bash
curl -X POST "http://localhost:3002/api/v1/register" \
  -H "Content-Type: application/json" \
  -d '{
    "path": "/Users/accusys/sftpgo_test/demo/Old_Time_Movie_Show_-_Charade_1963.HD.mov"
  }'
```

**Request:**
```json
POST /api/v1/register
Content-Type: application/json

{
  "path": "/Users/accusys/sftpgo_test/demo/Old_Time_Movie_Show_-_Charade_1963.HD.mov"
}
```

**Response:**
```
(待填寫)
{
  "uuid": "...",
  "video_id": ...,
  "file_name": "...",
  "duration": ...,
  "width": ...,
  "height": ...
}
```

---

## Phase 3: 處理進度追蹤

### Step 3.1: 查詢處理進度 (新版 API)

**API 呼叫:**
```bash
curl -X GET "http://localhost:3002/api/v1/progress/{uuid}"
```

**Response (新版 - 包含影片資訊與系統資源):**
```json
{
  "uuid": "a1b10138a6bbb0cd",
  "user": null,
  "group": null,
  "file_name": "Old_Time_Movie_Show_-_Charade_1963.HD.mov",
  "duration": 6879.33,
  "overall_progress": 28,
  "cpu_percent": 3.7,
  "gpu_percent": null,
  "memory_percent": 0.1,
  "memory_mb": 19328,
  "processors": [
    {"name": "asr", "status": "complete", "current": 1867, "total": 0, "progress": 100, "message": "1867 segments"},
    {"name": "cut", "status": "complete", "current": 1331, "total": 1331, "progress": 100, "message": "1331 scenes"},
    {"name": "asrx", "status": "error", "current": 0, "total": 0, "progress": 0, "message": "0 segments"},
    {"name": "yolo", "status": "progress", "current": 69400, "total": 412343, "progress": 16, "message": "frame 69400"},
    {"name": "ocr", "status": "pending", "current": 0, "total": 0, "progress": 0, "message": ""},
    {"name": "face", "status": "pending", "current": 0, "total": 0, "progress": 0, "message": ""},
    {"name": "pose", "status": "pending", "current": 0, "total": 0, "progress": 0, "message": ""}
  ]
}
```

**欄位說明:**
| 欄位 | 說明 |
|------|------|
| uuid | 影片唯一識別碼 |
| user | 處理所屬用戶 (如已設定) |
| group | 處理所屬群組 (如已設定) |
| file_name | 影片檔案名稱 |
| duration | 影片時長 (秒) |
| overall_progress | 整體進度 (百分比) |
| cpu_percent | CPU 使用率 (%) |
| gpu_percent | GPU 使用率 (%)，無 GPU 則為 null |
| memory_percent | 記憶體使用率 (%) |
| memory_mb | 記憶體使用量 (MB) |
| processors | 各處理器狀態陣列 |
```

---

## Phase 4: 自然語言檢索

### Step 4.1: RAG 搜尋

**API 呼叫:**
```bash
curl -X POST "http://localhost:3002/api/v1/search" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "What is the movie about?",
    "limit": 10,
    "uuid": "..."
  }'
```

**Request:**
```json
POST /api/v1/search
Content-Type: application/json

{
  "query": "What is the movie about?",
  "limit": 10,
  "uuid": "<uuid from registration>"
}
```

**Response:**
```
(待填寫)
```

---

### Step 4.2: n8n 搜尋 (含 file_path)

**API 呼叫:**
```bash
curl -X POST "http://localhost:3002/api/v1/n8n/search" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: muser_68600856036340bcafc01930eb4bd839" \
  -d '{
    "query": "What is the movie about?",
    "limit": 10,
    "uuid": "..."
  }'
```

**Response:**
```
(待填寫)
```

---

## 憑證彙整

| 服務 | 項目 | 值 |
|------|------|------|
| SFTPGo | API Base | `http://localhost:8080/api/v2` |
| SFTPGo | Demo User | `demo` |
| SFTPGo | Demo Password | `demopassword123` (已重設) |
| SFTPGo | Demo Home | `/Users/accusys/sftpgo_test/demo` |
| SFTPGo | Token Endpoint | `/api/v2/user/token` |
| SFTPGo | Share ID | `CjmQfrkXY5qDtC46WVZY2S` |
| Momentry | Server | `http://localhost:3002` |
| Momentry | MEDIA_BASE_URL | `https://wp.momentry.ddns.net` |

---

## 版本歷史

| 日期 | 版本 | 變更 |
|------|------|------|
| 2026-03-22 | v1.0 | 初始建立文件 |
| 2026-03-22 | v1.1 | 成功取得 Demo Token |
| 2026-03-22 | v1.2 | Phase 1 完成 (上傳 Charade 2.3GB) |
