feat(application): PSD layer separation and image quality/count threading
Convert GPT Image 2 layered PSD output into canvas image/text nodes with a local separation fallback (new layer_separation.go, oov/psd dependency), default layer-separation/edit-elements output_format to psd, and thread imageQuality/imageCount through project generation and job processing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -576,14 +576,14 @@ func TestAgentChatImageModeBypassesPlannerAndHidesSettings(t *testing.T) {
|
||||
}
|
||||
|
||||
thread, err := service.AgentChat(ctx, project.ID, design.AgentChatRequest{
|
||||
Mode: "image",
|
||||
ImageSize: "1536x1024",
|
||||
Mode: "image",
|
||||
ImageSize: "1536x1024",
|
||||
ImageCount: 3,
|
||||
Messages: []design.AgentChatMessage{
|
||||
{
|
||||
Role: "user",
|
||||
Contents: []design.AgentContent{
|
||||
{Type: "text", Text: "a cute bird flatten ui", TextSource: "input"},
|
||||
{Type: "text", Text: "图片生成参数:质量 自动,尺寸 1536x1024,比例 3:2,数量 3 张。纯生图模式,请直接围绕用户输入生成图片,不展开额外聊天。", TextSource: "settings"},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -747,7 +747,7 @@ func TestCreateProjectAsyncReturnsBeforeTaskPlanning(t *testing.T) {
|
||||
service := NewDesignService(repo, nil, nil, nil, nil, planner)
|
||||
service.SetJobQueue(queue)
|
||||
|
||||
project, err := service.CreateProjectAsync(ctx, "", "设计一个二次元水墨角色,输出正面、侧面、细节。", "gpt-image-2", "", true)
|
||||
project, err := service.CreateProjectAsync(ctx, "", "设计一个二次元水墨角色,输出正面、侧面、细节。", "gpt-image-2", "", "", 0, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -777,7 +777,7 @@ func TestCreateProjectAsyncWithEmptyPromptCreatesBlankCanvas(t *testing.T) {
|
||||
})
|
||||
service.SetJobQueue(queue)
|
||||
|
||||
project, err := service.CreateProjectAsync(ctx, "", "", "gpt-image-2", "", true)
|
||||
project, err := service.CreateProjectAsync(ctx, "", "", "gpt-image-2", "", "", 0, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -810,7 +810,7 @@ func TestCreateProjectGenerationAddsPlaceholdersAfterPlannerReturns(t *testing.T
|
||||
}
|
||||
service := NewDesignService(repo, inspectingCreateProjectAgent{repo: repo, t: t, expected: 3}, nil, nil, nil, creative)
|
||||
service.SetJobQueue(&fakeJobQueue{})
|
||||
project, err := service.CreateProjectAsync(ctx, "", "设计二次元水墨人物形象,输出角色正面、侧面、细节。", "gpt-image-2", "", false)
|
||||
project, err := service.CreateProjectAsync(ctx, "", "设计二次元水墨人物形象,输出角色正面、侧面、细节。", "gpt-image-2", "", "", 0, false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -853,7 +853,7 @@ func TestCreateProjectGenerationStreamsEachImageAsItFinishes(t *testing.T) {
|
||||
}
|
||||
service := NewDesignService(repo, incrementalCreateProjectAgent{repo: repo, t: t}, nil, nil, nil, creative)
|
||||
service.SetJobQueue(&fakeJobQueue{})
|
||||
project, err := service.CreateProjectAsync(ctx, "", "为桌游卡牌产品创建品牌视觉,包含卡背和卡面信息层级。", "gpt-image-2", "", false)
|
||||
project, err := service.CreateProjectAsync(ctx, "", "为桌游卡牌产品创建品牌视觉,包含卡背和卡面信息层级。", "gpt-image-2", "", "", 0, false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -902,7 +902,7 @@ func TestCreateProjectGenerationFinalizesAfterStaleHeartbeatOverwrite(t *testing
|
||||
}
|
||||
service := NewDesignService(repo, staleOverwriteIncrementalCreateProjectAgent{repo: repo, t: t}, nil, nil, nil, creative)
|
||||
service.SetJobQueue(&fakeJobQueue{})
|
||||
project, err := service.CreateProjectAsync(ctx, "", "设计一张盲盒IP视觉体系。", "gpt-image-2", "", false)
|
||||
project, err := service.CreateProjectAsync(ctx, "", "设计一张盲盒IP视觉体系。", "gpt-image-2", "", "", 0, false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -959,7 +959,7 @@ func TestCreateProjectGenerationPartialFailurePreservesSuccessfulImagesAndCloses
|
||||
}
|
||||
service := NewDesignService(repo, partialFailingIncrementalCreateProjectAgent{}, nil, nil, nil, creative)
|
||||
service.SetJobQueue(&fakeJobQueue{})
|
||||
project, err := service.CreateProjectAsync(ctx, "", "生成两张品牌视觉。", "gpt-image-2", "", false)
|
||||
project, err := service.CreateProjectAsync(ctx, "", "生成两张品牌视觉。", "gpt-image-2", "", "", 0, false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user