diff --git a/src/components/image-editor/ImageCanvasEditGenerationModalView.test.tsx b/src/components/image-editor/ImageCanvasEditGenerationModalView.test.tsx
index c4ca42259..db0763e54 100644
--- a/src/components/image-editor/ImageCanvasEditGenerationModalView.test.tsx
+++ b/src/components/image-editor/ImageCanvasEditGenerationModalView.test.tsx
@@ -15,6 +15,8 @@ function createDialog(
prompt: '旧修改提示',
status: 'idle',
sourceLayerId: 'layer-a',
+ imageModel: 'gpt-image-2',
+ imageSize: '1K',
...patch,
};
}
diff --git a/src/components/image-editor/ImageCanvasEditGenerationModalView.tsx b/src/components/image-editor/ImageCanvasEditGenerationModalView.tsx
index de12533d6..edc042dff 100644
--- a/src/components/image-editor/ImageCanvasEditGenerationModalView.tsx
+++ b/src/components/image-editor/ImageCanvasEditGenerationModalView.tsx
@@ -3,7 +3,6 @@ import { type Dispatch, type SetStateAction } from 'react';
import { UnifiedModal } from '../common/UnifiedModal';
import {
calculateEditorImageGenerationPrice,
- IMAGE_MODEL_GPT_IMAGE_2,
} from './ImageCanvasGenerationModel';
import { ImageCanvasBasicGenerationComposerView } from './ImageCanvasBasicGenerationComposerView';
import type { GenerateDialogState } from './ImageCanvasEditorTypes';
@@ -20,10 +19,12 @@ export function ImageCanvasEditGenerationModalView({
onSubmit,
}: ImageCanvasEditGenerationModalViewProps) {
const isOpen = dialog?.mode === 'edit' && dialog.status !== 'generating';
+ const dialogImageModel = dialog?.imageModel ?? 'gpt-image-2';
+ const dialogImageSize = dialog?.imageSize ?? '1K';
const editPrice = calculateEditorImageGenerationPrice({
kind: 'quick-edit',
- model: IMAGE_MODEL_GPT_IMAGE_2,
- imageSize: '1K',
+ model: dialogImageModel,
+ imageSize: dialogImageSize,
});
return (
@@ -42,9 +43,9 @@ export function ImageCanvasEditGenerationModalView({
dialog={{
...dialog,
mode: 'edit',
- imageModel: IMAGE_MODEL_GPT_IMAGE_2,
+ imageModel: dialogImageModel,
aspectRatio: dialog.aspectRatio ?? '1:1',
- imageSize: dialog.imageSize ?? '1K',
+ imageSize: dialogImageSize,
generationReferences: [],
}}
style={{}}
diff --git a/src/components/image-editor/ImageCanvasGenerationDialogModel.test.ts b/src/components/image-editor/ImageCanvasGenerationDialogModel.test.ts
index 8e704d2ec..f7fe6af2e 100644
--- a/src/components/image-editor/ImageCanvasGenerationDialogModel.test.ts
+++ b/src/components/image-editor/ImageCanvasGenerationDialogModel.test.ts
@@ -381,6 +381,9 @@ describe('ImageCanvasGenerationDialogModel', () => {
status: 'idle',
composerOpen: true,
sourceLayerId: 'layer-source',
+ imageModel: 'gpt-image-2',
+ aspectRatio: '4:3',
+ imageSize: '1K',
});
expect(createQuickEditPanelDraft(sourceLayer)).toEqual({
mode: 'quick-edit',
diff --git a/src/components/image-editor/ImageCanvasGenerationDialogModel.ts b/src/components/image-editor/ImageCanvasGenerationDialogModel.ts
index 4f6164920..fe33bb826 100644
--- a/src/components/image-editor/ImageCanvasGenerationDialogModel.ts
+++ b/src/components/image-editor/ImageCanvasGenerationDialogModel.ts
@@ -633,26 +633,53 @@ export function createUiDesignGenerationDialogDraft({
export function createEditDialogDraft(
sourceLayer: CanvasLayer,
+ options: {
+ imageModel?: string;
+ aspectRatio?: string;
+ imageSize?: string;
+ } = {},
): GenerateDialogState {
+ const imageModel = normalizeEditorImageModel(
+ options.imageModel ?? sourceLayer.model,
+ );
+ const aspectRatio =
+ options.aspectRatio ??
+ inferEditorImageAspectRatio(sourceLayer.originalWidth, sourceLayer.originalHeight);
+ const imageSize =
+ options.imageSize ??
+ inferEditorImageSizeLabel(sourceLayer.originalWidth, sourceLayer.originalHeight);
return {
mode: 'edit',
prompt: resolveUserGenerationPromptSnapshot(sourceLayer),
status: 'idle',
composerOpen: true,
sourceLayerId: sourceLayer.id,
+ imageModel,
+ aspectRatio,
+ imageSize,
};
}
export function createQuickEditPanelDraft(
sourceLayer: CanvasLayer,
+ options: {
+ imageModel?: string;
+ aspectRatio?: string;
+ imageSize?: string;
+ } = {},
): QuickEditPanelState {
- const aspectRatio = inferEditorImageAspectRatio(
- sourceLayer.originalWidth,
- sourceLayer.originalHeight,
- );
- const imageSize = inferEditorImageSizeLabel(
- sourceLayer.originalWidth,
- sourceLayer.originalHeight,
+ const aspectRatio = options.aspectRatio ??
+ inferEditorImageAspectRatio(
+ sourceLayer.originalWidth,
+ sourceLayer.originalHeight,
+ );
+ const imageSize = options.imageSize ??
+ inferEditorImageSizeLabel(
+ sourceLayer.originalWidth,
+ sourceLayer.originalHeight,
+ );
+ const model = normalizeEditorImageModel(
+ options.imageModel ?? sourceLayer.model,
);
return {
mode: 'quick-edit',
@@ -664,7 +691,7 @@ export function createQuickEditPanelDraft(
),
aspectRatio,
imageSize,
- model: normalizeEditorImageModel(sourceLayer.model),
+ model,
quickEditReferences: [],
status: 'idle',
};
@@ -714,9 +741,14 @@ export function createQuickEditGenerationDialogDraft({
export function createRedrawPanelDraft(
sourceLayer: CanvasLayer,
+ options: {
+ imageModel?: string;
+ aspectRatio?: string;
+ imageSize?: string;
+ } = {},
): QuickEditPanelState {
return {
- ...createQuickEditPanelDraft(sourceLayer),
+ ...createQuickEditPanelDraft(sourceLayer, options),
mode: 'redraw',
prompt: resolveUserGenerationPromptSnapshot(sourceLayer),
};
diff --git a/src/components/image-editor/useImageCanvasGenerationWorkflow.test.tsx b/src/components/image-editor/useImageCanvasGenerationWorkflow.test.tsx
index 74d69df72..1f5199fa8 100644
--- a/src/components/image-editor/useImageCanvasGenerationWorkflow.test.tsx
+++ b/src/components/image-editor/useImageCanvasGenerationWorkflow.test.tsx
@@ -248,6 +248,23 @@ function GenerationWorkflowHarness({
+
@@ -405,6 +422,21 @@ function GenerationWorkflowHarness({
>
填写生成提示词
+