@avclabs.ai/media-mcp 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,25 @@
1
1
  import axios from 'axios';
2
2
  import * as fs from 'fs';
3
- import * as path from 'path';
4
3
  import { z } from 'zod';
5
- import FormData from 'form-data';
4
+ import { checkLocalFile, formatRequestError, parseTosSignature, unwrapEnvelope, uploadToTos, } from './tos.js';
5
+ import { classifyStatus, POLL_REQUEST_TIMEOUT_MS, pollUntilTerminal, registerTool } from './tooling.js';
6
+ const PollIntervalSchema = z.number().min(0.5).max(30).default(5).describe('Polling interval in seconds (0.5-30), default 5');
7
+ const SyncTimeoutSchema = z.number().min(1).max(45).default(45).describe('Synchronous wait timeout in seconds (1-45), default 45. Returns task_id early when exceeded, use the task status tool to continue polling');
6
8
  // Schemas
7
9
  const CreateTaskSchema = z.object({
8
- video_source: z.string().describe('视频URL地址或本地文件路径(URL必须公网可访问,不支持需要登录或签名的链接)'),
9
- type: z.enum(['url', 'local']).default('url').describe('上传类型:url=网络视频,local=本地文件'),
10
- resolution: z.enum(['480p', '540p', '720p', '1080p', '2k']).default('720p').describe('目标分辨率,默认720p'),
10
+ video_source: z.string().describe('Video URL or local file path (URL must be publicly accessible, login or signed links are not supported)'),
11
+ type: z.enum(['url', 'local']).default('url').describe('Upload type: url=remote video, local=local file'),
12
+ resolution: z.enum(['480p', '540p', '720p', '1080p', '2k']).default('720p').describe('Target resolution, default 720p'),
11
13
  });
12
14
  const GetTaskStatusSchema = z.object({
13
- task_id: z.string().describe('任务ID'),
15
+ task_id: z.string().describe('Task ID'),
14
16
  });
15
17
  const EnhanceVideoSyncSchema = z.object({
16
- video_source: z.string().describe('视频URL地址或本地文件路径(URL必须公网可访问,不支持需要登录或签名的链接)'),
17
- type: z.enum(['url', 'local']).default('url').describe('上传类型:url=网络视频,local=本地文件'),
18
- resolution: z.enum(['480p', '540p', '720p', '1080p', '2k']).default('720p').describe('目标分辨率,默认720p'),
19
- poll_interval: z.number().default(5).describe('轮询间隔(秒),默认5'),
20
- timeout: z.number().default(50).describe('同步等待的超时时间(秒),默认50。超过后工具会主动返回 task_id,请使用 get_task_status 继续查询'),
18
+ video_source: z.string().describe('Video URL or local file path (URL must be publicly accessible, login or signed links are not supported)'),
19
+ type: z.enum(['url', 'local']).default('url').describe('Upload type: url=remote video, local=local file'),
20
+ resolution: z.enum(['480p', '540p', '720p', '1080p', '2k']).default('720p').describe('Target resolution, default 720p'),
21
+ poll_interval: PollIntervalSchema,
22
+ timeout: SyncTimeoutSchema,
21
23
  });
22
24
  export function setupVideoEnhancementTools(server, baseUrl, apiKey) {
23
25
  const client = axios.create({
@@ -28,178 +30,111 @@ export function setupVideoEnhancementTools(server, baseUrl, apiKey) {
28
30
  },
29
31
  timeout: 60000,
30
32
  });
31
- // create_task tool
32
- server.tool('create_task', `创建视频增强任务(异步)
33
+ registerTool(server, 'create_task', `Create a video enhancement task (asynchronous).
33
34
 
34
- 支持两种上传方式:
35
- 1. URL 上传:提供视频 URL
36
- 2. 本地上传:提供本地文件路径,MCP Server 自动上传到 TOS 对象存储
35
+ Two upload methods are supported:
36
+ 1. URL upload: provide a video URL
37
+ 2. Local upload: provide a local file path, the MCP Server will auto-upload to TOS object storage
37
38
 
38
- 参数说明:
39
- - video_source: 视频 URL 或本地文件路径
40
- - type: "url" 或 "local"
41
- - resolution: 目标分辨率
39
+ Parameters:
40
+ - video_source: video URL or local file path
41
+ - type: "url" or "local"
42
+ - resolution: target resolution
42
43
 
43
- 创建任务后会立即返回 task_id。你需要使用 get_task_status 工具轮询查询任务结果,直到 status 变为 "completed" 或 "failed"。`, CreateTaskSchema.shape, async (args) => {
44
- try {
45
- const result = await createTask(client, args.video_source, args.type, args.resolution);
46
- return {
47
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
48
- };
49
- }
50
- catch (error) {
51
- const errorMessage = error instanceof Error ? error.message : String(error);
52
- return {
53
- content: [{ type: 'text', text: JSON.stringify({ success: false, error: errorMessage }, null, 2) }],
54
- };
55
- }
44
+ After creating a task, a task_id is returned immediately. Use get_task_status to poll for results until status becomes "completed" or "failed".`, CreateTaskSchema.shape, async (args) => createTask(client, args.video_source, args.type, args.resolution));
45
+ registerTool(server, 'get_task_status', 'Query video enhancement task status. The status field can be: processing, completed, or failed. If status is processing, wait a few seconds and call this tool again to poll.', GetTaskStatusSchema.shape, async (args) => {
46
+ const result = await getTaskStatus(client, args.task_id);
47
+ return {
48
+ ...result,
49
+ // registerTool marks isError on success===false: a terminal failed
50
+ // status is a failed query outcome, not a healthy poll tick.
51
+ success: classifyStatus(result.status) !== 'failed',
52
+ message: result.status === 'processing' ? 'Task is still processing, please check again later' : undefined,
53
+ };
56
54
  });
57
- // get_task_status tool
58
- server.tool('get_task_status', '查询视频增强任务状态。返回值中的 status 字段可能为:processing(处理中)、completed(已完成)、failed(失败)。如果 status 为 processing,你需要等待几秒后再次调用此工具轮询。', GetTaskStatusSchema.shape, async (args) => {
59
- try {
60
- const result = await getTaskStatus(client, args.task_id);
61
- return {
62
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
63
- };
64
- }
65
- catch (error) {
66
- const errorMessage = error instanceof Error ? error.message : String(error);
67
- return {
68
- content: [{ type: 'text', text: JSON.stringify({ success: false, error: errorMessage }, null, 2) }],
69
- };
70
- }
71
- });
72
- // enhance_video_sync tool
73
- server.tool('enhance_video_sync', `同步增强视频(阻塞等待完成)
55
+ registerTool(server, 'enhance_video_sync', `Synchronously enhance video (blocks until completion).
74
56
 
75
- 支持两种上传方式:
76
- 1. URL 上传:提供视频 URL
77
- 2. 本地上传:提供本地文件路径,MCP Server 自动上传到 TOS 对象存储
57
+ Two upload methods are supported:
58
+ 1. URL upload: provide a video URL
59
+ 2. Local upload: provide a local file path, the MCP Server will auto-upload to TOS object storage
78
60
 
79
- 参数说明:
80
- - video_source: 视频 URL 或本地文件路径
81
- - type: "url" 或 "local"
82
- - resolution: 目标分辨率
83
- - poll_interval: 轮询间隔(秒)
84
- - timeout: 同步等待的超时时间(秒),默认50
61
+ Parameters:
62
+ - video_source: video URL or local file path
63
+ - type: "url" or "local"
64
+ - resolution: target resolution
65
+ - poll_interval: polling interval in seconds
66
+ - timeout: synchronous wait timeout in seconds, default 45
85
67
 
86
- 此工具仅适合短视频(预计处理时间 < 1 分钟)。如果任务在 50 秒内未完成,工具会提前返回并包含 task_id,你需要使用 get_task_status 继续查询。`, EnhanceVideoSyncSchema.shape, async (args) => {
87
- try {
88
- const result = await enhanceVideoSync(client, args.video_source, args.type, args.resolution, args.poll_interval, args.timeout);
89
- return {
90
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
91
- };
92
- }
93
- catch (error) {
94
- const errorMessage = error instanceof Error ? error.message : String(error);
95
- return {
96
- content: [{ type: 'text', text: JSON.stringify({ success: false, error: errorMessage }, null, 2) }],
97
- };
98
- }
99
- });
100
- }
101
- function checkLocalFile(filePath) {
102
- if (!fs.existsSync(filePath)) {
103
- throw new Error(`文件不存在: ${filePath}`);
104
- }
105
- const stats = fs.statSync(filePath);
106
- const maxSize = 100 * 1024 * 1024;
107
- if (stats.size > maxSize) {
108
- throw new Error('文件大小超过 100MB 限制');
109
- }
110
- return { filePath, fileName: path.basename(filePath) };
68
+ Best for short videos (estimated processing time < 1 minute). If the task is not completed within the timeout, the tool returns early with a task_id. Use get_task_status to continue polling.`, EnhanceVideoSyncSchema.shape, async (args) => enhanceVideoSync(client, args.video_source, args.type, args.resolution, args.poll_interval, args.timeout));
111
69
  }
112
70
  async function getTosSignature(client, fileName) {
113
71
  const response = await client.post('/api/v3/contents/generations/tos-signature', {
114
72
  file_type: 'video',
115
73
  file_name: fileName,
116
74
  });
117
- const data = response.data;
118
- if (data.code !== 0 && data.code !== 200) {
119
- throw new Error(data.message || '获取 TOS 签名失败');
75
+ const unwrapped = unwrapEnvelope(response);
76
+ if (!unwrapped.ok) {
77
+ throw new Error(unwrapped.error);
120
78
  }
121
- return data.data;
122
- }
123
- async function uploadToTos(filePath, signatureData) {
124
- const formData = new FormData();
125
- const objectKey = decodeURIComponent(new URL(signatureData.url).pathname.slice(1));
126
- formData.append('key', objectKey);
127
- const fieldMapping = {
128
- algorithm: 'x-tos-algorithm',
129
- credential: 'x-tos-credential',
130
- date: 'x-tos-date',
131
- signature: 'x-tos-signature',
132
- };
133
- for (const [key, value] of Object.entries(signatureData)) {
134
- if (key === 'url' || key === 'origin_policy')
135
- continue;
136
- const formKey = fieldMapping[key] || key;
137
- formData.append(formKey, String(value));
138
- }
139
- const fileName = path.basename(filePath);
140
- formData.append('file', fs.createReadStream(filePath), fileName);
141
- const response = await axios.post(signatureData.url, formData, {
142
- headers: formData.getHeaders(),
143
- maxBodyLength: Infinity,
144
- maxContentLength: Infinity,
145
- });
146
- if (response.status >= 400) {
147
- const debugInfo = JSON.stringify({
148
- status: response.status,
149
- statusText: response.statusText,
150
- data: response.data,
151
- url: signatureData.url,
152
- signatureFields: Object.keys(signatureData),
153
- fileName,
154
- fileSize: fs.statSync(filePath).size,
155
- }, null, 2);
156
- throw new Error(`TOS 上传失败: ${response.status} ${response.statusText}\n调试信息: ${debugInfo}`);
157
- }
158
- }
159
- function parseFileIdFromUrl(url) {
160
- const pathname = new URL(url).pathname;
161
- const segments = pathname.split('/');
162
- return decodeURIComponent(segments.pop() || '');
79
+ return unwrapped.data;
163
80
  }
164
81
  async function createTask(client, videoSource, sourceType, resolution) {
165
82
  let contentItem;
166
83
  if (sourceType === 'local') {
167
- const fileInfo = checkLocalFile(videoSource);
168
- const signatureData = await getTosSignature(client, fileInfo.fileName);
169
- await uploadToTos(videoSource, signatureData);
170
- const fileId = parseFileIdFromUrl(signatureData.url);
171
- contentItem = { type: 'video_file', file_id: fileId, file_name: fileInfo.fileName };
84
+ const fileInfo = checkLocalFile(videoSource, 'video');
85
+ // Step 1: Get TOS signature
86
+ let target;
87
+ try {
88
+ target = parseTosSignature(await getTosSignature(client, fileInfo.fileName));
89
+ }
90
+ catch (error) {
91
+ throw new Error(`[Step 1: TOS signature failed] ${formatRequestError(error)}`);
92
+ }
93
+ // Step 2: Upload to TOS
94
+ try {
95
+ await uploadToTos(target, fs.createReadStream(videoSource), fileInfo.fileName);
96
+ }
97
+ catch (error) {
98
+ throw new Error(`[Step 2: TOS upload failed] ${error.message}`);
99
+ }
100
+ contentItem = { type: 'video_file', file_id: target.fileId, file_name: fileInfo.fileName };
172
101
  }
173
102
  else {
174
103
  contentItem = { type: 'video_url', video_url: { url: videoSource } };
175
104
  }
105
+ // Step 3: Call video API
176
106
  const payload = { model: 'avc-enhance', content: [contentItem], resolution };
177
- const response = await client.post('/api/v3/contents/generations/tasks', payload);
178
- const data = response.data;
179
- if (data.code !== 0 && data.code !== 200) {
180
- return { success: false, error: data.message };
107
+ let response;
108
+ try {
109
+ response = await client.post('/api/v3/contents/generations/tasks', payload);
181
110
  }
182
- return { success: true, task_id: data.data.task_id, status: data.data.status };
111
+ catch (error) {
112
+ throw new Error(`[Step 3: API call failed] ${formatRequestError(error)}`);
113
+ }
114
+ const unwrapped = unwrapEnvelope(response);
115
+ if (!unwrapped.ok) {
116
+ return { success: false, error: unwrapped.error };
117
+ }
118
+ return { success: true, task_id: unwrapped.data.task_id, status: unwrapped.data.status };
183
119
  }
184
- async function getTaskStatus(client, taskId) {
185
- const response = await client.get(`/api/v3/contents/generations/tasks/${taskId}`);
186
- const data = response.data;
187
- if (data.code !== 0 && data.code !== 200) {
188
- return { success: false, error: data.message };
120
+ async function getTaskStatus(client, taskId, signal) {
121
+ const response = await client.get(`/api/v3/contents/generations/tasks/${encodeURIComponent(taskId)}`, {
122
+ timeout: POLL_REQUEST_TIMEOUT_MS,
123
+ signal,
124
+ });
125
+ const unwrapped = unwrapEnvelope(response);
126
+ if (!unwrapped.ok) {
127
+ throw new Error(unwrapped.error);
189
128
  }
190
- const result = data.data;
129
+ const result = unwrapped.data;
191
130
  return {
192
- success: true,
193
131
  task_id: result.task_id,
194
132
  status: result.status,
195
- progress: result.progress || 0,
133
+ progress: result.progress ?? 0,
196
134
  video_url: result.video_url,
197
- debug_video_url_length: result.video_url?.length,
198
- debug_video_url_full: result.video_url,
199
135
  error_message: result.error_message,
200
136
  created_at: result.created_at,
201
137
  updated_at: result.updated_at,
202
- message: result.status === 'processing' ? '任务仍在处理中,请稍后再查询' : undefined,
203
138
  };
204
139
  }
205
140
  async function enhanceVideoSync(client, videoSource, sourceType, resolution, pollInterval, timeout) {
@@ -207,30 +142,15 @@ async function enhanceVideoSync(client, videoSource, sourceType, resolution, pol
207
142
  if (!createResult.success) {
208
143
  return createResult;
209
144
  }
210
- const taskId = createResult.task_id;
211
- const startTime = Date.now();
212
- while (true) {
213
- const status = await getTaskStatus(client, taskId);
214
- if (!status.success) {
215
- return status;
216
- }
217
- if (status.status === 'completed' || status.status === 'failed') {
218
- return status;
219
- }
220
- const elapsed = (Date.now() - startTime) / 1000;
221
- if (elapsed >= timeout) {
222
- return {
223
- success: true,
224
- status: 'processing',
225
- task_id: taskId,
226
- message: `任务仍在处理中(已等待 ${timeout} 秒)。请使用 get_task_status 工具继续查询此任务状态。`,
227
- note: '此工具对长任务的同步等待已被截断,请切换到 get_task_status 轮询模式。',
228
- };
229
- }
230
- await sleep(pollInterval * 1000);
231
- }
232
- }
233
- function sleep(ms) {
234
- return new Promise((resolve) => setTimeout(resolve, ms));
145
+ return pollUntilTerminal({
146
+ taskId: createResult.task_id,
147
+ timeoutSeconds: timeout,
148
+ pollIntervalSeconds: pollInterval,
149
+ continueHint: 'get_task_status',
150
+ fetchStatus: async (signal) => {
151
+ const { task_id, status, ...payload } = await getTaskStatus(client, createResult.task_id, signal);
152
+ return { status, payload };
153
+ },
154
+ });
235
155
  }
236
156
  //# sourceMappingURL=video-enhancement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video-enhancement.js","sourceRoot":"","sources":["../src/video-enhancement.ts"],"names":[],"mappings":"AACA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,UAAU;AACV,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC7E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAClF,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;CACrG,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC7E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAClF,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC5D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,+DAA+D,CAAC;CAC1G,CAAC,CAAC;AAEH,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,OAAe,EAAE,MAAc;IAC3F,MAAM,MAAM,GAAkB,KAAK,CAAC,MAAM,CAAC;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnC,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,mBAAmB;IACnB,MAAM,CAAC,IAAI,CACT,aAAa,EACb;;;;;;;;;;;yFAWqF,EACrF,gBAAgB,CAAC,KAAK,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACvF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpG,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,mHAAmH,EACnH,mBAAmB,CAAC,KAAK,EACzB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpG,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB;;;;;;;;;;;;;uFAamF,EACnF,sBAAsB,CAAC,KAAK,EAC5B,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,OAAO,CACb,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpG,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;IAClC,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAqB,EAAE,QAAgB;IACpE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;QAC/E,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,aAAkB;IAC7D,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAElC,MAAM,YAAY,GAA2B;QAC3C,SAAS,EAAE,iBAAiB;QAC5B,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,iBAAiB;KAC7B,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,eAAe;YAAE,SAAS;QACvD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACzC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE;QAC7D,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE;QAC9B,aAAa,EAAE,QAAQ;QACvB,gBAAgB,EAAE,QAAQ;KAC3B,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,EAAE,aAAa,CAAC,GAAG;YACtB,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YAC3C,QAAQ;YACR,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI;SACrC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,WAAW,SAAS,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,MAAqB,EACrB,WAAmB,EACnB,UAAkB,EAClB,UAAkB;IAElB,IAAI,WAAgB,CAAC;IAErB,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACrD,WAAW,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAqB,EAAE,MAAc;IAChE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,sBAAsB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM;QAChD,oBAAoB,EAAE,MAAM,CAAC,SAAS;QACtC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;KACvE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,MAAqB,EACrB,WAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,YAAoB,EACpB,OAAe;IAEf,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACnF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QAChD,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,eAAe,OAAO,sCAAsC;gBACrE,IAAI,EAAE,6CAA6C;aACpD,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"video-enhancement.js","sourceRoot":"","sources":["../src/video-enhancement.ts"],"names":[],"mappings":"AACA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAExG,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC,CAAC;AAC9H,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2IAA2I,CAAC,CAAC;AAEtN,UAAU;AACV,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yGAAyG,CAAC;IAC5I,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACzG,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CACxH,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yGAAyG,CAAC;IAC5I,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACzG,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvH,aAAa,EAAE,kBAAkB;IACjC,OAAO,EAAE,iBAAiB;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,OAAe,EAAE,MAAc;IAC3F,MAAM,MAAM,GAAkB,KAAK,CAAC,MAAM,CAAC;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnC,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,YAAY,CACV,MAAM,EACN,aAAa,EACb;;;;;;;;;;;gJAW4I,EAC5I,gBAAgB,CAAC,KAAK,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAClF,CAAC;IAEF,YAAY,CACV,MAAM,EACN,iBAAiB,EACjB,+KAA+K,EAC/K,mBAAmB,CAAC,KAAK,EACzB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO;YACL,GAAG,MAAM;YACT,mEAAmE;YACnE,6DAA6D;YAC7D,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ;YACnD,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC,SAAS;SAC3G,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,YAAY,CACV,MAAM,EACN,oBAAoB,EACpB;;;;;;;;;;;;;+LAa2L,EAC3L,sBAAsB,CAAC,KAAK,EAC5B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAC1H,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAqB,EAAE,QAAgB;IACpE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;QAC/E,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,MAAqB,EACrB,WAAmB,EACnB,UAA2B,EAC3B,UAAkB;IAElB,IAAI,WAAgB,CAAC;IAErB,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAEtD,4BAA4B;QAC5B,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,iBAAiB,CAAC,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,kCAAkC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,WAAW,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;IACvE,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7E,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,6BAA6B,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAqB,EAAE,MAAc,EAAE,MAAoB;IACtF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sCAAsC,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE;QACpG,OAAO,EAAE,uBAAuB;QAChC,MAAM;KACP,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;IAC9B,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,MAAqB,EACrB,WAAmB,EACnB,UAA2B,EAC3B,UAAkB,EAClB,YAAoB,EACpB,OAAe;IAEf,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACnF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,iBAAiB,CAAC;QACvB,MAAM,EAAE,YAAY,CAAC,OAAO;QAC5B,cAAc,EAAE,OAAO;QACvB,mBAAmB,EAAE,YAAY;QACjC,YAAY,EAAE,iBAAiB;QAC/B,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7B,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@avclabs.ai/media-mcp",
4
- "version": "0.2.0",
5
- "description": "MCP Server for video enhancement and image segmentation (SAM3)",
4
+ "version": "0.3.0",
5
+ "description": "MCP Server for video enhancement, image enhancement/colorization/denoising, and image segmentation (SAM3)",
6
6
  "mcpName": "io.github.avclabs/media-mcp",
7
7
  "main": "dist/server.js",
8
8
  "types": "dist/server.d.ts",
@@ -14,26 +14,31 @@
14
14
  "config.json",
15
15
  "LICENSE",
16
16
  "README.md",
17
- "README_EN.md"
17
+ "README_CN.md"
18
18
  ],
19
19
  "scripts": {
20
20
  "build": "tsc",
21
+ "check:release": "node scripts/check-release.mjs",
21
22
  "dev": "tsc --watch",
22
23
  "prepare": "npm run build",
23
- "prepublishOnly": "npm run build"
24
+ "prepublishOnly": "npm run build",
25
+ "test": "npm run build && node --test tests/*.test.mjs",
26
+ "release:verify": "npm run check:release && npm audit --omit=dev --audit-level=high && npm test && npm pack --dry-run"
24
27
  },
25
28
  "keywords": [
26
29
  "mcp",
27
30
  "model-context-protocol",
28
31
  "video",
32
+ "image",
29
33
  "enhancement",
34
+ "colorization",
35
+ "denoising",
30
36
  "http",
31
37
  "client",
32
38
  "server",
33
39
  "claude",
34
40
  "anthropic"
35
41
  ],
36
- "author": "Your Name <your.email@example.com>",
37
42
  "license": "MIT",
38
43
  "repository": {
39
44
  "type": "git",
@@ -64,7 +69,7 @@
64
69
  "HTTP_API_BASE_URL": "https://mcp.avc.ai/enhance",
65
70
  "SAM3_API_BASE_URL": "https://mcp.avc.ai/sam"
66
71
  },
67
- "description": "视频增强 + SAM3 图像分割 MCP 服务",
72
+ "description": "视频增强 + 图片增强/上色/降噪 + SAM3 图像分割 MCP 服务",
68
73
  "setup": "需要替换 env.API_KEY 为你的 API Key"
69
74
  },
70
75
  "engines": {