feat(batch): sync dedicated image tools

This commit is contained in:
134 2026-08-11 14:04:35 +08:00
parent 4a6afb753d
commit d65ebc253b

View File

@ -8,6 +8,7 @@ import {
Image as ImageIcon, Image as ImageIcon,
Layers, Layers,
Loader2, Loader2,
Maximize2,
Plus, Plus,
RefreshCw, RefreshCw,
Sparkles, Sparkles,
@ -97,6 +98,7 @@ type BatchMode =
| "random-bg" | "random-bg"
| "rmbg" | "rmbg"
| "enhance" | "enhance"
| "extend"
| "watermark"; | "watermark";
type ItemStatus = "pending" | "processing" | "completed" | "failed"; type ItemStatus = "pending" | "processing" | "completed" | "failed";
@ -337,6 +339,12 @@ const modeOptions: Array<{
description: "多图同步增强画质", description: "多图同步增强画质",
icon: Sparkles, icon: Sparkles,
}, },
{
id: "extend",
label: "批量图像拓展",
description: "多图同步扩展画面",
icon: Maximize2,
},
{ {
id: "watermark", id: "watermark",
label: "批量去水印", label: "批量去水印",
@ -357,6 +365,8 @@ function getModeActionLabel(mode: BatchMode, count: number) {
return `批量抠图 (${count} 张)`; return `批量抠图 (${count} 张)`;
case "enhance": case "enhance":
return `批量变清晰 (${count} 张)`; return `批量变清晰 (${count} 张)`;
case "extend":
return `批量图像拓展 (${count} 张)`;
case "watermark": case "watermark":
return `批量去水印 (${count} 张)`; return `批量去水印 (${count} 张)`;
} }
@ -368,6 +378,8 @@ function getModePrompt(mode: BatchMode) {
return "批量处理-抠图"; return "批量处理-抠图";
case "enhance": case "enhance":
return "批量处理-变清晰"; return "批量处理-变清晰";
case "extend":
return "批量处理-图像拓展";
case "watermark": case "watermark":
return "批量处理-去水印"; return "批量处理-去水印";
default: default:
@ -1772,6 +1784,25 @@ export function SceneFusionView({
}; };
} }
if (mode === "extend") {
const payload = await requestLongTaskResult({
endpoint: "/api/extend",
payload: {
image_url: item.image,
prompt: getModePrompt(mode),
includeBase64: false,
},
});
if (!payload?.success) {
throw new Error(payload?.error || payload?.detail || "图像拓展失败");
}
return {
result: payload.thumbnail_url || payload.original_url || item.image,
originalUrl:
payload.original_url || payload.thumbnail_url || item.image,
};
}
if (mode === "watermark") { if (mode === "watermark") {
const payload = await requestLongTaskResult({ const payload = await requestLongTaskResult({
endpoint: "/api/watermark-remove", endpoint: "/api/watermark-remove",
@ -2799,6 +2830,7 @@ export function SceneFusionView({
{(mode === "rmbg" || {(mode === "rmbg" ||
mode === "enhance" || mode === "enhance" ||
mode === "extend" ||
mode === "watermark") && ( mode === "watermark") && (
<div className="space-y-2"> <div className="space-y-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">