80 lines
3.9 KiB
Go
80 lines
3.9 KiB
Go
package capability
|
|
|
|
const (
|
|
maxAgentNodeTitleRunes = 240
|
|
maxAgentNodeContentRunes = 16000
|
|
)
|
|
|
|
func BuiltinRegistry() *Registry {
|
|
registry, err := NewRegistry([]Descriptor{
|
|
{
|
|
Type: "text", Version: "1", Label: "文本", DefaultWidth: 340, DefaultHeight: 240,
|
|
InputKind: "text", Connection: ConnectionPolicy{CanSource: true}, CanUpdate: true,
|
|
SummaryFields: []string{"content"}, DetailFields: []string{"content"},
|
|
PatchFields: editableNodeFields("metadata.content", "正文", "节点正文"),
|
|
CreateMetadata: func(content string) map[string]any {
|
|
return map[string]any{"content": content, "status": "idle", "fontSize": float64(14)}
|
|
},
|
|
},
|
|
{
|
|
Type: "markdown", Version: "1", Label: "Markdown", DefaultWidth: 420, DefaultHeight: 320,
|
|
InputKind: "text", Connection: ConnectionPolicy{CanSource: true}, CanUpdate: true,
|
|
SummaryFields: []string{"content"}, DetailFields: []string{"content"},
|
|
PatchFields: editableNodeFields("metadata.content", "Markdown 正文", "Markdown 正文"),
|
|
},
|
|
generatedMediaDescriptor("image", "2", "图片", 720, 405, "image", ConnectionPolicy{
|
|
CanSource: true, CanTarget: true, CanReference: true, AcceptedInputKinds: []string{"text", "image"},
|
|
}),
|
|
generatedMediaDescriptor("video", "2", "视频", 720, 405, "video", ConnectionPolicy{
|
|
CanSource: true, CanTarget: true, CanReference: true, AcceptedInputKinds: []string{"text", "image", "video", "audio"},
|
|
}),
|
|
generatedMediaDescriptor("audio", "2", "音频", 340, 120, "audio", ConnectionPolicy{
|
|
CanSource: true, CanTarget: true, CanReference: true, MaxInputCount: 1, AcceptedInputKinds: []string{"text"},
|
|
}),
|
|
{
|
|
Type: "frame", Version: "1", Label: "背板", DefaultWidth: 760, DefaultHeight: 520,
|
|
SummaryFields: []string{"label"}, DetailFields: []string{"label"},
|
|
CreateMetadata: func(string) map[string]any {
|
|
return map[string]any{"frame": map[string]any{"collapsed": false, "expandedWidth": float64(760), "expandedHeight": float64(520)}}
|
|
},
|
|
},
|
|
{
|
|
Type: "script", Version: "1", Label: "分镜脚本", DefaultWidth: 920, DefaultHeight: 360,
|
|
SummaryFields: []string{"storyboard"}, DetailFields: []string{"storyboard"}, ProjectionKind: "storyboard", ProjectionField: "storyboard",
|
|
CreateMetadata: func(string) map[string]any {
|
|
return map[string]any{"status": "idle", "workflowKind": "script", "storyboard": map[string]any{"rows": []any{}, "visibleColumns": []any{"shotNumber", "durationSeconds", "videoMotionPrompt", "dialogue", "assets"}, "referenceNodeIds": []any{}}}
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return registry
|
|
}
|
|
|
|
func generatedMediaDescriptor(nodeType, version, label string, width, height float64, generationMode string, connection ConnectionPolicy) Descriptor {
|
|
return Descriptor{
|
|
Type: nodeType, Version: version, Label: label, DefaultWidth: width, DefaultHeight: height,
|
|
InputKind: nodeType, GenerationMode: generationMode, Connection: connection, CanUpdate: true,
|
|
SummaryFields: []string{"prompt", "composerContent", "assetTags", "referenceNodeIds"},
|
|
DetailFields: []string{"prompt", "composerContent", "assetTags", "referenceNodeIds"},
|
|
PatchFields: editableNodeFields("metadata.composerContent", "下一版提示词", "下次生成使用的提示词草稿;不覆盖已提交提示词或媒体结果"),
|
|
CreateMetadata: generatedMetadata,
|
|
}
|
|
}
|
|
|
|
func editableNodeFields(contentPath, contentLabel, contentDescription string) map[string]PatchField {
|
|
return map[string]PatchField{
|
|
"title": {
|
|
Path: "title", Kind: patchKindString, Label: "节点名称", Order: 10, Description: "节点标题", MaxRunes: maxAgentNodeTitleRunes,
|
|
},
|
|
"content": {
|
|
Path: contentPath, Kind: patchKindString, Label: contentLabel, Order: 20, Description: contentDescription, MaxRunes: maxAgentNodeContentRunes,
|
|
},
|
|
}
|
|
}
|
|
|
|
func generatedMetadata(prompt string) map[string]any {
|
|
return map[string]any{"content": "", "prompt": prompt, "composerContent": prompt, "status": "idle"}
|
|
}
|