@@ -1122,38 +1145,16 @@ const AdminGenerationAiRecords: React.FC = () => {
) : null}
- {preview.status === 'completed' ? (
-
diff --git a/video-gen-admin/src/pages/AdminImageEngines.tsx b/video-gen-admin/src/pages/AdminImageEngines.tsx
index c329bdf1..60f86289 100644
--- a/video-gen-admin/src/pages/AdminImageEngines.tsx
+++ b/video-gen-admin/src/pages/AdminImageEngines.tsx
@@ -1,6 +1,6 @@
import React, { useEffect, useState } from 'react';
import {
- Button, Card, Checkbox, Form, Input, message, Modal, Popconfirm, Select, Space, Switch, Table, Tag, Typography,
+ Button, Card, Checkbox, Form, Input, InputNumber, message, Modal, Popconfirm, Select, Space, Switch, Table, Tag, Typography,
} from 'antd';
import {
PictureOutlined, PlusOutlined, EditOutlined, DeleteOutlined,
@@ -21,6 +21,11 @@ interface ImageEngine {
generateUrl: string;
isActive: boolean;
priority: number;
+ multiGenerationEnabled: boolean;
+ maxGenerationCount: number;
+ multiImageMaxImages: number;
+ maxReferenceImageCount: number;
+ outputFormat: '' | 'png' | 'jpeg';
}
function parseJsonArray(val: unknown): any[] {
@@ -80,6 +85,7 @@ const AdminImageEngines: React.FC = () => {
const [loading, setLoading] = useState(false);
const [modal, setModal] = useState<{ open: boolean; engine: ImageEngine | null }>({ open: false, engine: null });
const [form] = Form.useForm();
+ const multiGenerationEnabled = Form.useWatch('multiGenerationEnabled', form) ?? false;
const load = async () => {
setLoading(true);
@@ -126,6 +132,11 @@ const AdminImageEngines: React.FC = () => {
generate_url: values.generateUrl || '',
is_active: values.isActive ?? true,
priority: values.priority ?? 0,
+ multi_generation_enabled: values.multiGenerationEnabled ?? false,
+ max_generation_count: values.maxGenerationCount ?? 1,
+ multi_image_max_images: values.multiImageMaxImages ?? 15,
+ max_reference_image_count: values.maxReferenceImageCount ?? 14,
+ output_format: values.outputFormat ?? '',
};
if (modal.engine) {
await saveImageEngine({ id: modal.engine.id, ...payload });
@@ -168,6 +179,8 @@ const AdminImageEngines: React.FC = () => {
form.resetFields();
form.setFieldsValue({
isActive: true, priority: 0,
+ multiGenerationEnabled: false, maxGenerationCount: 1, multiImageMaxImages: 15,
+ maxReferenceImageCount: 14, outputFormat: '',
supportedModels: ['doubao-seedream-5-0-260128'],
defaultSize: '2K',
maxImageCount: 0,
@@ -232,6 +245,18 @@ const AdminImageEngines: React.FC = () => {
title: '最大图片', dataIndex: 'maxImageCount', width: 100,
render: (v: number) =>
{v} 张,
},
+ {
+ title: '多份生成', dataIndex: 'multiGenerationEnabled', width: 100,
+ render: (v: boolean) =>
{v ? '开启' : '关闭'},
+ },
+ {
+ title: '数量上限', dataIndex: 'maxGenerationCount', width: 100,
+ render: (v: number, r: ImageEngine) => (
+
1 ? 'magenta' : 'default'}>
+ 最多 {r.multiGenerationEnabled ? (v || 1) : 1} 份
+
+ ),
+ },
{
title: '状态', dataIndex: 'isActive', width: 80,
render: (v: boolean) =>
{v ? '启用' : '停用'},
@@ -350,6 +375,33 @@ const AdminImageEngines: React.FC = () => {
+
+ 多份生成能力
+
+ 管理后台只控制是否允许客户端选择多份及最大数量。客户端本次选择 2-5 份时,后端只调用一次火山同步组图 API;失败绝不降级成多次单图请求。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 多份生成能力
+
+ 管理后台只控制是否允许客户端选择多份及最大数量;客户端每次可在 1 到上限之间选择。
+
+
+
+
+
+
+
+