feat(server): add layer-separation generator task

Introduce the `layer-separation` generator (edit-elements node action)
that splits a source image into a clean background layer, foreground
image artifacts with bounding boxes, and editable text render data.

- New layer_separation.go builds the separated result and artifacts
- SubmitGeneratorTask routes layer-separation and move-object via a
  switch; standalone task completion + polling support
- Extend artifact metadata with BBox and GeneratorName across the
  domain, API types, mapper, .api schema, and API.md
- edit-elements gets a transparent manual-frame placeholder holding the
  separated foreground images and text layers beside the original

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-09 12:26:43 +08:00
parent 676e1c4c67
commit 039d166972
9 changed files with 1523 additions and 36 deletions
+10 -8
View File
@@ -133,14 +133,16 @@ func toAPIGeneratorTaskArtifacts(items []design.GeneratorTaskArtifact) []types.G
Type: item.Type,
Content: item.Content,
Metadata: types.GeneratorTaskArtifactMetadata{
ArtifactId: item.Metadata.ArtifactID,
Format: item.Metadata.Format,
Height: item.Metadata.Height,
Label: item.Metadata.Label,
NodeId: item.Metadata.NodeID,
NodeName: item.Metadata.NodeName,
SizeBytes: item.Metadata.SizeBytes,
Width: item.Metadata.Width,
ArtifactId: item.Metadata.ArtifactID,
BBox: append([]int64(nil), item.Metadata.BBox...),
Format: item.Metadata.Format,
GeneratorName: item.Metadata.GeneratorName,
Height: item.Metadata.Height,
Label: item.Metadata.Label,
NodeId: item.Metadata.NodeID,
NodeName: item.Metadata.NodeName,
SizeBytes: item.Metadata.SizeBytes,
Width: item.Metadata.Width,
},
})
}