艺术家生平-故事演绎
这是知识库中的旧 DSL 案例。DSL 本身是机器文件,下面保留原始 YAML,供后续迭代、对照和排错使用。
文件大小
286115 bytes
来源路径
/Users/ljn/Desktop/自动化搭建/AI生产线知识库/raw/old_dsl/艺术家生平-故事演绎.yml
app:
description: 艺术家生平-故事演绎
icon: 🤖
icon_background: '#E3E5E8'
icon_type: emoji
mode: workflow
name: 艺术家生平-故事演绎
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: package
value:
plugin_unique_identifier: aict/ai_hub:3.3.1@4e71d8262fbecb133fd6801e8b0a4c141f0bf4f0d6b68cec1b5c254a65365e96
kind: app
version: 0.3.1
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
allowed_file_extensions: []
allowed_file_types: []
allowed_file_upload_methods:
- local_file
- cs_file
audio:
enabled: false
number_limits: 1
transfer_methods:
- local_file
enabled: false
fileUploadConfig:
audio_file_size_limit: 100
batch_count_limit: 5
file_size_limit: 50
image_file_size_limit: 20
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- cs_file
number_limits: 3
video:
enabled: false
number_limits: 1
transfer_methods:
- local_file
opening_statement: ''
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: iteration-start
targetType: code
id: 1766574059102start-source-1766574094213-target
selected: false
source: 1766574059102start
sourceHandle: source
target: '1766574094213'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: code
targetType: llm
id: 1766574094213-source-1766574211446-target
selected: false
source: '1766574094213'
sourceHandle: source
target: '1766574211446'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 1766557310716-true-1766565906395-target
selected: false
source: '1766557310716'
sourceHandle: 'true'
target: '1766565906395'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: tool
targetType: code
id: 1766574707339-source-1766577511976-target
selected: false
source: '1766574707339'
sourceHandle: source
target: '1766577511976'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: code
targetType: tool
id: 1766577511976-source-1766577671094-target
selected: false
source: '1766577511976'
sourceHandle: source
target: '1766577671094'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: tool
targetType: code
id: 1766577671094-source-1766577709907-target
selected: false
source: '1766577671094'
sourceHandle: source
target: '1766577709907'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: false
sourceType: iteration
targetType: iteration
id: 1766574059102-source-1766579168310-target
selected: false
source: '1766574059102'
sourceHandle: source
target: '1766579168310'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: iteration-start
targetType: code
id: 1766579168310start-source-1766579221158-target
selected: false
source: 1766579168310start
sourceHandle: source
target: '1766579221158'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: tool
targetType: code
id: 1766579307542-source-1766580740909-target
selected: false
source: '1766579307542'
sourceHandle: source
target: '1766580740909'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: false
sourceType: iteration
targetType: iteration
id: 1766579168310-source-1766631985311-target
selected: false
source: '1766579168310'
sourceHandle: source
target: '1766631985311'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766631985311'
sourceType: iteration-start
targetType: code
id: 1766631985311start-source-1766632013010-target
selected: false
source: 1766631985311start
sourceHandle: source
target: '1766632013010'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766631985311'
sourceType: code
targetType: llm
id: 1766632013010-source-1766632190094-target
selected: false
source: '1766632013010'
sourceHandle: source
target: '1766632190094'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766631985311'
sourceType: llm
targetType: code
id: 1766632190094-source-1766632617565-target
selected: false
source: '1766632190094'
sourceHandle: source
target: '1766632617565'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: false
sourceType: iteration
targetType: iteration
id: 1766631985311-source-1766632760253-target
selected: false
source: '1766631985311'
sourceHandle: source
target: '1766632760253'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: iteration-start
targetType: code
id: 1766632760253start-source-1766632810839-target
selected: false
source: 1766632760253start
sourceHandle: source
target: '1766632810839'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: code
targetType: tool
id: 1766633846590-source-1766637839537-target
selected: false
source: '1766633846590'
sourceHandle: source
target: '1766637839537'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: tool
targetType: code
id: 1766637839537-source-1766633797134-target
selected: false
source: '1766637839537'
sourceHandle: source
target: '1766633797134'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: tool
targetType: code
id: 1767168888271-source-1766580740909-target
selected: false
source: '1767168888271'
sourceHandle: source
target: '1766580740909'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInLoop: false
sourceType: llm
targetType: if-else
id: 1767513600761-source-1766557310716-target
selected: false
source: '1767513600761'
sourceHandle: source
target: '1766557310716'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: if-else
targetType: tool
id: 1767168795046-true-1766579307542-target
selected: false
source: '1767168795046'
sourceHandle: 'true'
target: '1766579307542'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: if-else
targetType: tool
id: 1767168795046-false-1767168888271-target
selected: false
source: '1767168795046'
sourceHandle: 'false'
target: '1767168888271'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: code
targetType: if-else
id: 1766632810839-source-1767612074064-target
selected: false
source: '1766632810839'
sourceHandle: source
target: '1767612074064'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: if-else
targetType: tool
id: 1767612074064-true-1767611826573-target
selected: false
source: '1767612074064'
sourceHandle: 'true'
target: '1767611826573'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: if-else
targetType: http-request
id: 1767612074064-false-1766647889824-target
selected: false
source: '1767612074064'
sourceHandle: 'false'
target: '1766647889824'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: tool
targetType: code
id: 1767611826573-source-1766633846590-target
selected: false
source: '1767611826573'
sourceHandle: source
target: '1766633846590'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: llm
targetType: if-else
id: 1766574211446-source-1767710910480-target
selected: false
source: '1766574211446'
sourceHandle: source
target: '1767710910480'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: if-else
targetType: tool
id: 1767710910480-false-1767711018753-target
selected: false
source: '1767710910480'
sourceHandle: 'false'
target: '1767711018753'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: tool
targetType: code
id: 1767711018753-source-1766577511976-target
selected: false
source: '1767711018753'
sourceHandle: source
target: '1766577511976'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 1766557310716-false-1766565906395-target
selected: false
source: '1766557310716'
sourceHandle: 'false'
target: '1766565906395'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: if-else
id: 1768184532311-source-1767513946983-target
selected: false
source: '1768184532311'
sourceHandle: source
target: '1767513946983'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: start
targetType: if-else
id: 1765354062480-source-1768806919571-target
selected: false
source: '1765354062480'
sourceHandle: source
target: '1768806919571'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: if-else
id: 1768894989678-source-1766557310716-target
selected: false
source: '1768894989678'
sourceHandle: source
target: '1766557310716'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: code
id: 1768803191521-source-1768184532311-target
selected: false
source: '1768803191521'
sourceHandle: source
target: '1768184532311'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: iteration
id: 1766565906395-source-1766574059102-target
selected: false
source: '1766565906395'
sourceHandle: source
target: '1766574059102'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: if-else
targetType: tool
id: 1767710910480-true-1768915366540-target
selected: false
source: '1767710910480'
sourceHandle: 'true'
target: '1768915366540'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
sourceType: tool
targetType: tool
id: 1768915366540-source-1766574707339-target
selected: false
source: '1768915366540'
sourceHandle: source
target: '1766574707339'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: false
sourceType: iteration
targetType: code
id: 1766632760253-source-1768987193454-target
source: '1766632760253'
sourceHandle: source
target: '1768987193454'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 1768806919571-false-1768803191521-target
source: '1768806919571'
sourceHandle: 'false'
target: '1768803191521'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: code
targetType: tool
id: 1768987193454-source-1769069698077-target
source: '1768987193454'
sourceHandle: source
target: '1769069698077'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: tool
targetType: end
id: 1769069698077-source-1766575021174-target
source: '1769069698077'
sourceHandle: source
target: '1766575021174'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: if-else
targetType: tool
id: 1767168795046-c11347ba-0f2b-48c0-898e-6a88baa1a5cd-1769510509007-target
source: '1767168795046'
sourceHandle: c11347ba-0f2b-48c0-898e-6a88baa1a5cd
target: '1769510509007'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: tool
targetType: code
id: 1769510509007-source-1766580740909-target
source: '1769510509007'
sourceHandle: source
target: '1766580740909'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: code
targetType: if-else
id: 1766579221158-source-1769519278388-target
source: '1766579221158'
sourceHandle: source
target: '1769519278388'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: if-else
targetType: if-else
id: 1769519278388-true-1767168795046-target
source: '1769519278388'
sourceHandle: 'true'
target: '1767168795046'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
sourceType: if-else
targetType: tool
id: 1769519278388-false-1767168888271-target
source: '1769519278388'
sourceHandle: 'false'
target: '1767168888271'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: tool
id: 1768806919571-true-1772677692387-target
source: '1768806919571'
sourceHandle: 'true'
target: '1772677692387'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: tool
targetType: code
id: 1772677692387-source-1768803191521-target
source: '1772677692387'
sourceHandle: source
target: '1768803191521'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: if-else
id: 1773732078844-source-1766557310716-target
source: '1773732078844'
sourceHandle: source
target: '1766557310716'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: llm
id: 1767513946983-0c081d5e-e816-41a9-a860-7e10b654ac47-1773732078844-target
source: '1767513946983'
sourceHandle: 0c081d5e-e816-41a9-a860-7e10b654ac47
target: '1773732078844'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: llm
id: 1767513946983-368673b3-3987-4923-80f8-eee8e3477fe3-1768894989678-target
source: '1767513946983'
sourceHandle: 368673b3-3987-4923-80f8-eee8e3477fe3
target: '1768894989678'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: llm
id: 1768990832178-source-1767513600761-target
source: '1768990832178'
sourceHandle: source
target: '1767513600761'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: llm
id: 1776397744783-source-1768990832178-target
source: '1776397744783'
sourceHandle: source
target: '1768990832178'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: llm
id: 1767513946983-true-1776397744783-target
source: '1767513946983'
sourceHandle: 'true'
target: '1776397744783'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: http-request
targetType: tool
id: 1766647889824-source-1779099074767-target
source: '1766647889824'
sourceHandle: source
target: '1779099074767'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
sourceType: tool
targetType: code
id: 1779099074767-source-1766633846590-target
source: '1779099074767'
sourceHandle: source
target: '1766633846590'
targetHandle: target
type: custom
zIndex: 1002
nodes:
- data:
desc: ''
selected: false
title: 开始
type: start
variables:
- label: 剧本
max_length: 20000
options: []
required: true
type: paragraph
variable: content
- default: 旁白
label: 场景分析模式
max_length: 48
options:
- 独白
- 旁白
- 19 世纪风
required: true
type: select
variable: scene_mode
- default: 3D皮克斯风格
label: 全局风格提示词
max_length: 400000
options:
- 19世纪油画风格
- 3D皮克斯风格
- 波普艺术风格
- 吉卜力手绘水彩风格
- 新中式东方奇幻
- 写实
required: false
type: select
variable: global_style
- label: 角色信息列表
max_length: 4800000
options: []
required: false
type: paragraph
variable: all_actors_text
- allowed_file_extensions: []
allowed_file_types:
- image
allowed_file_upload_methods:
- local_file
label: 角色垫图
max_length: 6
options: []
required: false
type: file-list
variable: character_ref_image
- label: 角色锚点描述
max_length: 4800000
options: []
required: false
type: paragraph
variable: characterAncher
- default: '16:9'
label: 视频高宽比
max_length: 48
options:
- '1:1'
- '16:9'
- '9:16'
- '4:3'
- '32:9'
required: false
type: select
variable: video_aspect
- label: 自动翻译的第二字幕语言
max_length: 256
options: []
required: false
type: text-input
variable: translate_language
- label: 高优先级自定义风格
max_length: 4800000
options: []
required: false
type: paragraph
variable: custom_global_style
- default: 否
label: 忽略字幕
max_length: 48
options:
- 是
- 否
required: false
type: select
variable: ignore_subtitle
- label: 带时间戳文本
max_length: 480000
options: []
required: false
type: paragraph
variable: timestamped_lines
height: 349
id: '1765354062480'
position:
x: -1145.2642840255203
y: -1360.4570940737062
positionAbsolute:
x: -1145.2642840255203
y: -1360.4570940737062
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: not empty
id: 98962e8c-6978-4374-972e-cf33f7aa3348
value: ''
varType: string
variable_selector:
- '1765354062480'
- content
id: 'true'
logical_operator: and
desc: ''
selected: false
title: 条件分支 5
type: if-else
height: 125
id: '1766557310716'
position:
x: 711.3244894650169
y: -356.99609724310164
positionAbsolute:
x: 711.3244894650169
y: -356.99609724310164
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
code: "function parseVideoAspect(video_aspect) {\n var video_width = 2560;\n\
\ var video_height = 1440;\n if (video_aspect == \"1:1\") {\n \
\ video_width = 2048;\n video_height = 2048;\n } else if (video_aspect\
\ == \"16:9\") {\n video_width = 2560;\n video_height = 1440;\n\
\ } else if (video_aspect == \"9:16\") {\n video_width = 1440;\n\
\ video_height = 2560;\n } else if (video_aspect == \"4:3\") {\n\
\ video_width = 2304;\n video_height = 1782;\n } else if\
\ (video_aspect == \"21:9\") {\n video_width = 3024;\n video_height\
\ = 1296;\n }\n return {\n video_width: video_width,\n \
\ video_height: video_height,\n video_resolution: String(video_width)\
\ + \"x\" + String(video_height),\n }\n}\n/**\n * 拆分场景节点\n * 将剧本拆分成单个场景,用于循环调用优化节点\n\
\ * \n * 输入:script2.json 格式的完整剧本\n * 输出:project_info + scenes 数组\n */\n\n\
function main({ json3, json4, actors , video_aspect, json5}) {\n const\
\ data = json3 || json4 || json5;\n\n const {\n project_info =\
\ {},\n scenes = [],\n } = data;\n\n const {\n video_width,\n\
\ video_height,\n video_resolution,\n } = parseVideoAspect(video_aspect);\n\
\n // 提取项目信息\n const projectInfo = {\n title: project_info.title\
\ || '',\n global_style: project_info.global_style || '',\n \
\ actors: actors,\n video_width: video_width,\n video_height:\
\ video_height,\n video_aspect: video_aspect,\n };\n\n // 构建场景列表\n\
\ const sceneList = scenes.map((scene) => ({\n ...scene,\n \
\ }));\n\n return {\n // 项目信息(传递给每次循环)\n projectInfo: projectInfo,\n\
\ \n // 场景列表(用于循环迭代)\n scenes: sceneList,\n \
\ projectInfoStr: JSON.stringify(projectInfo),\n video_width: video_width,\n\
\ video_height: video_height,\n video_resolution: video_resolution,\n\
\ };\n}\n"
code_language: javascript
desc: ''
outputs:
projectInfo:
children: null
type: object
projectInfoStr:
children: null
type: string
scenes:
children: null
type: array[object]
video_height:
children: null
type: number
video_resolution:
children: null
type: string
video_width:
children: null
type: number
selected: false
title: 统一场景基本信息
type: code
variables:
- value_selector:
- '1767513600761'
- structured_output
value_type: object
variable: json3
- value_selector:
- '1768894989678'
- structured_output
value_type: object
variable: json4
- value_selector:
- '1768803191521'
- actors
value_type: array[object]
variable: actors
- value_selector:
- '1765354062480'
- video_aspect
value_type: string
variable: video_aspect
- value_selector:
- '1773732078844'
- structured_output
value_type: object
variable: json5
height: 53
id: '1766565906395'
position:
x: 350.66290517552244
y: 73.42562567858332
positionAbsolute:
x: 350.66290517552244
y: 73.42562567858332
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
desc: ''
error_handle_mode: terminated
height: 475
is_parallel: true
iterator_input_type: array[object]
iterator_selector:
- '1766565906395'
- scenes
output_selector:
- '1766577709907'
- result
output_type: array[object]
parallel_nums: 10
selected: false
start_node_id: 1766574059102start
title: 生成场景图套件
type: iteration
width: 2619.1849501891425
height: 475
id: '1766574059102'
position:
x: -449.9746639053287
y: 797.5655251175879
positionAbsolute:
x: -449.9746639053287
y: 797.5655251175879
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 2619
zIndex: 1
- data:
desc: ''
isInIteration: true
selected: false
title: ''
type: iteration-start
draggable: false
height: 48
id: 1766574059102start
parentId: '1766574059102'
position:
x: 24
y: 68
positionAbsolute:
x: -425.9746639053287
y: 865.5655251175879
selectable: false
selected: false
sourcePosition: right
targetPosition: left
type: custom-iteration-start
width: 44
zIndex: 1002
- data:
code: "function getImageUrls(namesOrCharacters, objects) {\n // 创建一个映射,便于快速查找\n\
\ const objectMap = new Map();\n objects.forEach(obj => {\n objectMap.set(obj.name,\
\ obj.image_url);\n });\n \n // 统一处理:无论输入是字符串还是对象,都尝试提取name\n const\
\ imageUrls = namesOrCharacters.map(item => {\n if (typeof item === 'string')\
\ {\n return objectMap.get(item);\n } else if (item && typeof item\
\ === 'object' && item.name) {\n return objectMap.get(item.name);\n\
\ }\n return undefined;\n });\n \n // 过滤掉未找到的项\n const filteredUrls\
\ = imageUrls.filter(url => url !== undefined);\n \n // 生成逗号拼接的字符串\n \
\ const concatenatedString = filteredUrls.join(',');\n \n return {\n \
\ urls: filteredUrls,\n concatenatedString: concatenatedString\n };\n\
}\n\nfunction main({item, projectInfo}) {\n const {\n global_style,\n\
\ actors\n } = projectInfo\n\n const scene = item\n\n const\
\ {urls, concatenatedString} = getImageUrls(scene.characters, actors)\n\n\
\ return {\n global_style: global_style,\n id: String(scene.id),\n\
\ narration: scene.narration,\n visual_description: scene.visual_description,\n\
\ visual_prompt: scene.visual_prompt,\n has_character: scene.has_character,\n\
\n actor_urls: urls,\n concatenatedString: concatenatedString,\n\
\ }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
outputs:
actor_urls:
children: null
type: array[string]
concatenatedString:
children: null
type: string
global_style:
children: null
type: string
has_character:
children: null
type: number
id:
children: null
type: string
narration:
children: null
type: string
visual_description:
children: null
type: string
visual_prompt:
children: null
type: string
selected: false
title: 获取单个场景信息
type: code
variables:
- value_selector:
- '1766574059102'
- item
value_type: object
variable: item
- value_selector:
- '1766565906395'
- projectInfo
value_type: object
variable: projectInfo
height: 53
id: '1766574094213'
parentId: '1766574059102'
position:
x: 91.56977576817872
y: 70.76495918732974
positionAbsolute:
x: -358.40488813715
y: 868.3304843049176
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
audio:
configs:
variable_selector: []
enabled: false
context:
enabled: false
variable_selector: []
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
model:
completion_params:
json_schema: "{\n \"type\": \"object\",\n \"properties\": {\n \"\
id\": {\n \"type\": \"number\"\n },\n \"optimized_prompt\"\
: {\n \"type\": \"string\"\n },\n \"include_character\":\
\ {\n \"type\": \"string\"\n },\n \"shot_type\": {\n \
\ \"type\": \"string\"\n }\n },\n \"required\": [\n \"id\"\
,\n \"optimized_prompt\",\n \"include_character\",\n \"shot_type\"\
\n ],\n \"additionalProperties\": false\n}"
max_completion_tokens: 71472
response_format: json_schema
mode: chat
name: gpt-5.1-2025-11-13
provider: aict/ai_hub/ai_hub
prompt_template:
- id: 0c1f4242-e5ed-4c2c-90bd-928308de4023
role: system
text: "你是一位专业的 AI 绘图提示词工程师。将输入字段生成安全合规、时代绝对一致且【完美兼容角色参考图】的【英文】绘画提示词,并以严格\
\ JSON 输出。\n\n---\n\n## 输入字段\n- id: {{#1766574094213.id#}}\n- narration:\
\ {{#1766574094213.narration#}}\n- visual_description: {{#1766574094213.visual_description#}}\n\
- current_visual_prompt: {{#1766574094213.visual_prompt#}}\n- has_character:\
\ {{#1766574094213.has_character#}}\n- global_style: {{#1766574094213.global_style#}}\n\
\n---\n\n## 核心安全与遮蔽协议(最高优先级 - 零容忍)\n**目标:物理性地消除任何触发 NSFW 过滤器的可能性。**\n\n\
1) **绝对禁止内容:**\n - 色情、性暗示、裸体(包括真人、雕塑、绘画、人体模型)、露点、甚至“看起来像裸体”的肤色紧身衣。\n\
\ - 暴力、血腥、非法、仇恨内容。\n\n2) **强制着装规则(Physical Clothing Layer):**\n -\
\ **真人角色:** 若 include_character=true:默认继承 current_visual_prompt 中已存在的服装设定,不得为了“安全”新增或改写为\
\ heavy fabric / high-collar 等刻板模板。\n - 仅当 narration/visual_description\
\ 明确涉及裸露风险场景(洗澡/更衣/亲密/医疗检查等)时,才进行“安全改写”,改写方式优先为:改成 head-and-shoulders\
\ close-up,或 POV of objects,或人物背影且穿着日常衣物;使用中性措辞:fully dressed / wearing\
\ regular clothing。\n - 禁止输出任何“免责声明式句子”(例如以 all visible people fully\
\ clothed... 开头的固定模板句)。\n - **雕塑/艺术品/背景人物:** 必须明确描述为“穿着衣服”或“抽象化”(如:draped\
\ marble statue, abstract stone carving)。禁止使用 marble statue 等易误判词。\n\n\
3) **敏感场景清洗(Sanitization):**\n - 若涉及洗澡、更衣、睡觉、医疗:必须转为 wearing thick heavy\
\ robe / full nightgown,或 head and shoulders close-up,或转为 POV of objects。严禁出现\
\ bath, bed, skin, body 等词。\n\n4) **英文禁词库(清洗 optimized_prompt):**\n \
\ - 屏蔽:naked, nude, bare, breast, chest, cleavage, lingerie, underwear,\
\ bikini, muscle, anatomy, flesh, sexy, seductive, bath, shower.\n -\
\ 替换为:wrapped in fabric, heavy coat, silhouette, modest.\n\n---\n\n##\
\ 角色一致性保护协议(Character Consistency Protocol - 解决参考图失效的核心)\n**目标:防止文本提示词干扰下游的“图生图/角色参考图”节点,确保角色特征由参考图主导。**\n\
\n1) **外貌极简原则 (Minimal Physical Description):** \n - 严禁在 prompt 中详细描述角色的五官、发型、发色、瞳色、体型(例如禁止写\
\ blonde hair, blue eyes, tall, beautiful face)。\n - 仅使用基础代词或身份词(如 1girl,\
\ 1boy, the man, the warrior, the protagonist)。将外貌定义权 100% 交给参考图。\n2)\
\ **服装继承铁律 (Clothing Inheritance):**\n - 如果 `current_visual_prompt`\
\ 中已存在具体的服装描述,**必须原样保留**,绝对禁止为了“时代一致性”或“安全”强行覆盖或添加额外的服装补丁(如 traditional\
\ robes),否则会破坏参考图的角色轮廓。\n - 仅在 `current_visual_prompt` 完全没有提及服装,且场景需要时,才补充符合时代的服装。\n\
\n---\n\n## 通用时代与语境一致性协议(Universal Era & Context Consistency)\n**目标:强制分离“渲染风格”与“物理内容”,确保画面所有物理元素100%忠于设定的时代,杜绝风格干扰导致的穿越。**\n\
\n**Step A: 时代最高优先级侦测 (Absolute Era Priority)**\n- **最高权重:** 优先检查 `current_visual_prompt`\
\ 中是否已存在具体的时代背景(如 ancient China, 1920s, medieval)。如果存在,**该时代设定具有绝对统治力**。\n\
- **降级推断:** 仅当 `current_visual_prompt` 无明确时代时,才基于 `narration` 和 `visual_description`\
\ 推断。\n- **风格解耦铁律:** `global_style`(如 Pixar, 3D, Cyberpunk render)**仅决定画面的笔触、光影、材质渲染方式,绝对不能改变人物的服饰、道具和建筑年代**。\n\
\n**Step B: 元素强制对齐 (Element Alignment)**\n- **Props & Environment:** 提取时代后,所有道具和背景必须转换为该时代的专有物品。\n\
\n**Step C: 时代错误清洗 (Anachronism Check)**\n- 剔除任何不属于确立时代的元素。例如时代为古代,严格删除\
\ smartphone, modern street, t-shirt, jeans 等一切现代隐含词。\n\n---\n\n## 工作流与生成逻辑\n\
\n**Step 1 — Shot Logic**\n仅基于 visual_description + current_visual_prompt\
\ 判断 shot_type 与 include_character:\nA) 画面能看见人物本体(即使 has_character 为 0,只要描述中有人、人群、身体部位)\
\ -> include_character = true\nB) 纯环境 / 主观镜头 (POV) / 仅手部特写 -> include_character\
\ = false\n\n**Step 2 — 构建 optimized_prompt(英文一行,逗号分隔)**\n- optimized_prompt\
\ 必须为一行英文,逗号分隔。\n\n**Path A — include_character: true**\n拼接顺序:\n1. Style:\
\ `global_style`\n2. Era Lock: 确立的具体时代 (e.g., Ancient China era)\n3. Scene\
\ & Environment: 从 `visual_description` 和 `current_visual_prompt` 提取的场景背景\n\
4. Character & Action (极简原则): 基础角色词 (1girl/1boy/etc.) + 动作/状态。**切勿描述五官发型**。\n\
5. Clothing Status: 仅继承 `current_visual_prompt` 中的原有服装;若无,则简写为穿着符合时代的衣物。**禁止使用\
\ all visible people fully clothed in... 这种破坏性长句**。\n6. Props: 必须符合时代的道具\n\
7. Composition & Lighting: 镜头类型,符合时代的灯光,cinematic composition, detailed\
\ rendering, --ar\n\n**Path B — include_character: false**\n拼接顺序:\n1.\
\ Style: `global_style`\n2. Era Lock: 确立的具体时代 (e.g., Ancient China era)\n\
3. Perspective & Environment: POV shot / Environment shot, 加上符合该时代的建筑/道具/材质描述\n\
4. 剔除一切人物锚点。\n5. Composition & Lighting: 同上\n\n**画中画/照片规则:** 不得使用任何角色锚点,画中画内容必须符合检测到的时代背景。\n\
\n---\n\n## 输出格式(严格 JSON,仅输出 JSON)\n{\n \"id\": \"输入时的id\",\n \"optimized_prompt\"\
: \"one-line English prompt...\",\n \"include_character\": true/false,\n\
\ \"shot_type\": \"Wide shot / Medium shot / POV shot ...\",\n \"safety_note\"\
: \"简述:检测到的时代背景、角色极简处理说明、防风格干扰的道具调整、以及安全清洗操作\"\n}"
selected: false
structured_output:
schema:
additionalProperties: false
properties:
id:
type: number
include_character:
type: string
optimized_prompt:
type: string
shot_type:
type: string
required:
- id
- optimized_prompt
- include_character
- shot_type
type: object
structured_output_enabled: true
title: 文生图提示词生成
type: llm
variables: []
video:
configs:
variable_selector: []
enabled: false
vision:
enabled: false
height: 121
id: '1766574211446'
parentId: '1766574059102'
position:
x: 98.42487140153776
y: 174.68218124158102
positionAbsolute:
x: -351.54979250379097
y: 972.2477063591689
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: 使用垫图
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766574059102'
output_schema: null
outputs:
- type: any
value_selector:
- '1753035060851'
- error
variable: error_message
- type: any
value_selector:
- '1753289226679'
- url_list
variable: url_list
paramSchemas:
- auto_generate: null
default: doubao-seedream-4-0-250828
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 模型
ja_JP: 模型
pt_BR: 模型
zh_Hans: 模型
llm_description: ''
max: null
min: null
name: model
options:
- icon: null
label:
en_US: doubao-seedream-4-0-250828
ja_JP: doubao-seedream-4-0-250828
pt_BR: doubao-seedream-4-0-250828
zh_Hans: doubao-seedream-4-0-250828
value: doubao-seedream-4-0-250828
- icon: null
label:
en_US: doubao-seedream-4-5-251128
ja_JP: doubao-seedream-4-5-251128
pt_BR: doubao-seedream-4-5-251128
zh_Hans: doubao-seedream-4-5-251128
value: doubao-seedream-4-5-251128
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 提示词(建议不超过500个汉字或1000个英文单词)
ja_JP: 提示词(建议不超过500个汉字或1000个英文单词)
pt_BR: 提示词(建议不超过500个汉字或1000个英文单词)
zh_Hans: 提示词(建议不超过500个汉字或1000个英文单词)
llm_description: ''
max: null
min: null
name: prompt
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: 2048x2048
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 宽高像素(默认值2048x2048,4.5版本不支持1K)
ja_JP: 宽高像素(默认值2048x2048,4.5版本不支持1K)
pt_BR: 宽高像素(默认值2048x2048,4.5版本不支持1K)
zh_Hans: 宽高像素(默认值2048x2048,4.5版本不支持1K)
llm_description: ''
max: null
min: null
name: size
options:
- icon: null
label:
en_US: 1K
ja_JP: 1K
pt_BR: 1K
zh_Hans: 1K
value: 1K
- icon: null
label:
en_US: 2K
ja_JP: 2K
pt_BR: 2K
zh_Hans: 2K
value: 2K
- icon: null
label:
en_US: 4K
ja_JP: 4K
pt_BR: 4K
zh_Hans: 4K
value: 4K
- icon: null
label:
en_US: 2048x2048
ja_JP: 2048x2048
pt_BR: 2048x2048
zh_Hans: 2048x2048
value: 2048x2048
- icon: null
label:
en_US: 2304x1728
ja_JP: 2304x1728
pt_BR: 2304x1728
zh_Hans: 2304x1728
value: 2304x1728
- icon: null
label:
en_US: 1728x2304
ja_JP: 1728x2304
pt_BR: 1728x2304
zh_Hans: 1728x2304
value: 1728x2304
- icon: null
label:
en_US: 2560x1440
ja_JP: 2560x1440
pt_BR: 2560x1440
zh_Hans: 2560x1440
value: 2560x1440
- icon: null
label:
en_US: 1440x2560
ja_JP: 1440x2560
pt_BR: 1440x2560
zh_Hans: 1440x2560
value: 1440x2560
- icon: null
label:
en_US: 2496x1664
ja_JP: 2496x1664
pt_BR: 2496x1664
zh_Hans: 2496x1664
value: 2496x1664
- icon: null
label:
en_US: 1664x2496
ja_JP: 1664x2496
pt_BR: 1664x2496
zh_Hans: 1664x2496
value: 1664x2496
- icon: null
label:
en_US: 3024x1296
ja_JP: 3024x1296
pt_BR: 3024x1296
zh_Hans: 3024x1296
value: 3024x1296
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
ja_JP: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
pt_BR: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
zh_Hans: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
llm_description: ''
max: null
min: null
name: custom_size
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否关闭组图功能(默认disabled)
ja_JP: 是否关闭组图功能(默认disabled)
pt_BR: 是否关闭组图功能(默认disabled)
zh_Hans: 是否关闭组图功能(默认disabled)
llm_description: ''
max: null
min: null
name: sequential_image_generation
options:
- icon: null
label:
en_US: auto
ja_JP: auto
pt_BR: auto
zh_Hans: auto
value: auto
- icon: null
label:
en_US: disabled
ja_JP: disabled
pt_BR: disabled
zh_Hans: disabled
value: disabled
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
ja_JP: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
pt_BR: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
zh_Hans: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
llm_description: ''
max: null
min: null
name: max_images
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 原始图片(图片格式:jpeg、png、webp、gif)
ja_JP: 原始图片(图片格式:jpeg、png、webp、gif)
pt_BR: 原始图片(图片格式:jpeg、png、webp、gif)
zh_Hans: 原始图片(图片格式:jpeg、png、webp、gif)
llm_description: ''
max: null
min: null
name: images
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: files
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否添加水印(默认值true)
ja_JP: 是否添加水印(默认值true)
pt_BR: 是否添加水印(默认值true)
zh_Hans: 是否添加水印(默认值true)
llm_description: ''
max: null
min: null
name: watermark
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
params:
custom_size: ''
images: ''
max_images: ''
model: ''
prompt: ''
sequential_image_generation: ''
size: ''
watermark: ''
provider_id: 22632cc7-732a-4b68-94e7-5be7e1b48ba9
provider_name: 即梦-文/图生图-4.x版本
provider_type: workflow
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 1000
selected: false
title: 即梦-文/图生图-4.x版本-垫图
tool_configurations: {}
tool_description: 即梦-文/图生图-4.x版本
tool_label: 即梦-文/图生图-4.x版本
tool_name: seedream_i2i_t2i_tool
tool_node_version: '2'
tool_parameters:
custom_size:
type: mixed
value: null
images:
type: variable
value:
- '1768915366540'
- download_files
max_images:
type: constant
value: null
model:
type: constant
value: doubao-seedream-4-5-251128
prompt:
type: mixed
value: '{{#1766574211446.structured_output.optimized_prompt#}}'
sequential_image_generation:
type: constant
value: auto
size:
type: variable
value:
- '1766565906395'
- video_resolution
watermark:
type: constant
value: 'false'
type: tool
height: 162
id: '1766574707339'
parentId: '1766574059102'
position:
x: 1468.4944261537582
y: 75.56272384531894
positionAbsolute:
x: 1018.5197622484295
y: 873.1282489629068
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
outputs:
- value_selector:
- '1769069698077'
- draft_url
value_type: string
variable: draft_url
- value_selector:
- '1769069698077'
- export_video_url
value_type: string
variable: export_video_url
- value_selector:
- '1769069698077'
- script_url
value_type: string
variable: script_url
- value_selector:
- '1768987193454'
- project_info
value_type: object
variable: project_info
- value_selector:
- '1768987193454'
- storyboard
value_type: array[object]
variable: storyboard
- value_selector:
- '1765354062480'
- video_aspect
value_type: string
variable: video_aspect
- value_selector:
- '1765354062480'
- translate_language
value_type: string
variable: translate_language
selected: false
title: 结束 3
type: end
height: 245
id: '1766575021174'
position:
x: 281.78842816109204
y: 3629.334894185703
positionAbsolute:
x: 281.78842816109204
y: 3629.334894185703
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
code: "\nfunction main({json, json1}) {\n var url = \"\"\n if (json\
\ != null) {\n url = json[0].url_list[0]\n } else {\n url\
\ = json1[0].url_list[0]\n }\n \n return {\n result: url\n\
\ }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
outputs:
result:
children: null
type: string
selected: false
title: 提取图片地址
type: code
variables:
- value_selector:
- '1766574707339'
- json
value_type: array[object]
variable: json
- value_selector:
- '1767711018753'
- json
value_type: array[object]
variable: json1
height: 53
id: '1766577511976'
parentId: '1766574059102'
position:
x: 2021.8588859988195
y: 170.56933838022474
positionAbsolute:
x: 1571.8842220934907
y: 968.1348634978126
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766574059102'
output_schema: null
outputs:
- type: string
value_selector:
- '1760867387289'
- url
variable: url
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 资源地址
ja_JP: 资源地址
pt_BR: 资源地址
zh_Hans: 资源地址
llm_description: ''
max: null
min: null
name: url
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 资源类型
ja_JP: 资源类型
pt_BR: 资源类型
zh_Hans: 资源类型
llm_description: ''
max: null
min: null
name: type
options:
- icon: null
label:
en_US: jpg/image
ja_JP: jpg/image
pt_BR: jpg/image
zh_Hans: jpg/image
value: jpg/image
- icon: null
label:
en_US: mp4/video
ja_JP: mp4/video
pt_BR: mp4/video
zh_Hans: mp4/video
value: mp4/video
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: select
params:
type: ''
url: ''
provider_id: 8e9ef31b-83d5-4a5a-a717-1e7d86250a62
provider_name: AI课件-资源转存
provider_type: workflow
selected: false
title: AI课件-资源转存
tool_configurations: {}
tool_description: 把外网的资源转存的ndr上
tool_label: AI课件-资源转存
tool_name: aic_resource_storage
tool_node_version: '2'
tool_parameters:
isCdn:
type: constant
value: 否
type:
type: constant
value: jpg/image
url:
type: mixed
value: '{{#1766577511976.result#}}'
type: tool
height: 93
id: '1766577671094'
parentId: '1766574059102'
position:
x: 2359.1849501891425
y: 83.09452933769182
positionAbsolute:
x: 1909.2102862838137
y: 880.6600544552797
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
code: "\nfunction main({item, url, structured_output, actor_urls}) {\n \
\ const newItem = {\n ...item,\n image_url: url,\n \
\ ...structured_output,\n actor_urls: actor_urls,\n }\n return\
\ {\n result: newItem\n }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
outputs:
result:
children: null
type: object
selected: false
title: 装配场景信息
type: code
variables:
- value_selector:
- '1766574059102'
- item
value_type: object
variable: item
- value_selector:
- '1766577671094'
- url
value_type: string
variable: url
- value_selector:
- '1766574211446'
- structured_output
value_type: object
variable: structured_output
- value_selector:
- '1766574094213'
- actor_urls
value_type: array[string]
variable: actor_urls
height: 53
id: '1766577709907'
parentId: '1766574059102'
position:
x: 2313.6465314750703
y: 291.85849659907933
positionAbsolute:
x: 1863.6718675697416
y: 1089.424021716667
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
error_handle_mode: terminated
height: 529
is_parallel: true
iterator_input_type: array[object]
iterator_selector:
- '1766574059102'
- output
output_selector:
- '1766580740909'
- result
output_type: array[object]
parallel_nums: 10
selected: false
start_node_id: 1766579168310start
title: 生成 tts 套件
type: iteration
width: 1786.184379480382
height: 529
id: '1766579168310'
position:
x: -1055.3167020451433
y: 1440.7653726068438
positionAbsolute:
x: -1055.3167020451433
y: 1440.7653726068438
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 1786
zIndex: 1
- data:
desc: ''
isInIteration: true
selected: false
title: ''
type: iteration-start
draggable: false
height: 48
id: 1766579168310start
parentId: '1766579168310'
position:
x: 24
y: 68
positionAbsolute:
x: -1031.3167020451433
y: 1508.7653726068438
selectable: false
selected: false
sourcePosition: right
targetPosition: left
type: custom-iteration-start
width: 44
zIndex: 1002
- data:
code: "/**\n * 根据一组名字或角色对象,从给定对象列表中找到第一个匹配的 voice 信息\n * @param {Array<string|{name:\
\ string}>} namesOrCharacters - 名字字符串或包含 name 属性的对象\n * @param {Array<{name:\
\ string, voiceid: string, actor_voice_source: string, actor_voice_type?:\
\ string}>} objects - 源对象列表\n * @returns {{voiceid: string, actor_voice_source:\
\ string, actor_voice_type: string} | null} 匹配到的 voice 信息,没有则返回 fallback\n\
\ */\nfunction getVoiceSource(namesOrCharacters, objects) {\n const fallback\
\ = {\n voiceid: \"任运\",\n actor_voice_source: \"NDTTS\",\n actor_voice_type:\
\ \"\",\n };\n \n // 参数校验\n if (!Array.isArray(namesOrCharacters) ||\
\ namesOrCharacters.length === 0) {\n return fallback;\n }\n if (!Array.isArray(objects)\
\ || objects.length === 0) {\n return fallback;\n }\n\n // 创建 name\
\ -> 对象 的映射\n const objectMap = new Map();\n for (const obj of objects)\
\ {\n if (obj && typeof obj === 'object' && obj.name) {\n objectMap.set(obj.name,\
\ obj);\n }\n }\n\n // 按顺序尝试匹配 namesOrCharacters 中的每一项\n for (const\
\ item of namesOrCharacters) {\n let nameKey;\n\n if (typeof item\
\ === 'string') {\n nameKey = item;\n } else if (item && typeof\
\ item === 'object' && item.name) {\n nameKey = item.name;\n }\n\
\n if (!nameKey) continue;\n\n const voiceObj = objectMap.get(nameKey);\n\
\ if (voiceObj && voiceObj.voiceid && voiceObj.actor_voice_source) {\n\
\ return {\n voiceid: voiceObj.voiceid,\n actor_voice_source:\
\ voiceObj.actor_voice_source,\n actor_voice_type: voiceObj.actor_voice_type\
\ || voiceObj.voiceid || \"\", // 确保有默认值\n };\n }\n }\n\n // 没有任何匹配\n\
\ return fallback;\n}\n\nfunction main({item, actors}) {\n const narrator_name\
\ = item.narrator_name || \"\";\n let charactersToSearch;\n \n if (narrator_name\
\ !== \"\") {\n charactersToSearch = [narrator_name];\n } else {\n \
\ charactersToSearch = item.characters || [];\n }\n \n const actor\
\ = getVoiceSource(charactersToSearch, actors);\n \n return {\n voiceid:\
\ actor.voiceid,\n actor_voice_source: actor.actor_voice_source,\n \
\ actor_voice_type: actor.actor_voice_type,\n result: item.narration\
\ || \"\",\n narrator_name: narrator_name,\n };\n}"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
outputs:
actor_voice_source:
children: null
type: string
actor_voice_type:
children: null
type: string
narrator_name:
children: null
type: string
result:
children: null
type: string
voiceid:
children: null
type: string
selected: false
title: 获取单个 tts场景信息
type: code
variables:
- value_selector:
- '1766579168310'
- item
value_type: object
variable: item
- value_selector:
- '1768803191521'
- actors
value_type: array[object]
variable: actors
height: 53
id: '1766579221158'
parentId: '1766579168310'
position:
x: 120.04463516245073
y: 65.63570812996068
positionAbsolute:
x: -935.2720668826926
y: 1506.4010807368045
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766579168310'
output_schema: null
outputs:
- type: any
value_selector:
- '1753035060851'
- error
variable: error_message
- type: any
value_selector:
- '1753289226679'
- url
variable: url
- type: any
value_selector:
- '1753289226679'
- duration
value_type: string
variable: duration
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 文本(长度不超过300)
ja_JP: 文本(长度不超过300)
pt_BR: 文本(长度不超过300)
zh_Hans: 文本(长度不超过300)
llm_description: ''
max: null
min: null
name: text
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 发音人
ja_JP: 发音人
pt_BR: 发音人
zh_Hans: 发音人
llm_description: ''
max: null
min: null
name: speaker
options:
- icon: null
label:
en_US: 儿童绘本
ja_JP: 儿童绘本
pt_BR: 儿童绘本
zh_Hans: 儿童绘本
value: 儿童绘本
- icon: null
label:
en_US: vivi
ja_JP: vivi
pt_BR: vivi
zh_Hans: vivi
value: vivi
- icon: null
label:
en_US: 大壹
ja_JP: 大壹
pt_BR: 大壹
zh_Hans: 大壹
value: 大壹
- icon: null
label:
en_US: 黑猫侦探社咪仔
ja_JP: 黑猫侦探社咪仔
pt_BR: 黑猫侦探社咪仔
zh_Hans: 黑猫侦探社咪仔
value: 黑猫侦探社咪仔
- icon: null
label:
en_US: 鸡汤女
ja_JP: 鸡汤女
pt_BR: 鸡汤女
zh_Hans: 鸡汤女
value: 鸡汤女
- icon: null
label:
en_US: 魅力女友
ja_JP: 魅力女友
pt_BR: 魅力女友
zh_Hans: 魅力女友
value: 魅力女友
- icon: null
label:
en_US: 流畅女声
ja_JP: 流畅女声
pt_BR: 流畅女声
zh_Hans: 流畅女声
value: 流畅女声
- icon: null
label:
en_US: 儒雅逸辰
ja_JP: 儒雅逸辰
pt_BR: 儒雅逸辰
zh_Hans: 儒雅逸辰
value: 儒雅逸辰
- icon: null
label:
en_US: 小何
ja_JP: 小何
pt_BR: 小何
zh_Hans: 小何
value: 小何
- icon: null
label:
en_US: 云舟
ja_JP: 云舟
pt_BR: 云舟
zh_Hans: 云舟
value: 云舟
- icon: null
label:
en_US: 小天
ja_JP: 小天
pt_BR: 小天
zh_Hans: 小天
value: 小天
- icon: null
label:
en_US: 可爱女生
ja_JP: 可爱女生
pt_BR: 可爱女生
zh_Hans: 可爱女生
value: 可爱女生
- icon: null
label:
en_US: 调皮公主
ja_JP: 调皮公主
pt_BR: 调皮公主
zh_Hans: 调皮公主
value: 调皮公主
- icon: null
label:
en_US: 爽朗少年
ja_JP: 爽朗少年
pt_BR: 爽朗少年
zh_Hans: 爽朗少年
value: 爽朗少年
- icon: null
label:
en_US: 天才同桌
ja_JP: 天才同桌
pt_BR: 天才同桌
zh_Hans: 天才同桌
value: 天才同桌
- icon: null
label:
en_US: 知性灿灿
ja_JP: 知性灿灿
pt_BR: 知性灿灿
zh_Hans: 知性灿灿
value: 知性灿灿
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: select
- auto_generate: null
default: mp3
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 音频格式
ja_JP: 音频格式
pt_BR: 音频格式
zh_Hans: 音频格式
llm_description: ''
max: null
min: null
name: audio_params_format
options:
- icon: null
label:
en_US: mp3
ja_JP: mp3
pt_BR: mp3
zh_Hans: mp3
value: mp3
- icon: null
label:
en_US: ogg_opus
ja_JP: ogg_opus
pt_BR: ogg_opus
zh_Hans: ogg_opus
value: ogg_opus
- icon: null
label:
en_US: pcm
ja_JP: pcm
pt_BR: pcm
zh_Hans: pcm
value: pcm
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
ja_JP: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
pt_BR: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
zh_Hans: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
llm_description: ''
max: null
min: null
name: audio_params_speech_rate
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 自动识别语种(默认为false)
ja_JP: 自动识别语种(默认为false)
pt_BR: 自动识别语种(默认为false)
zh_Hans: 自动识别语种(默认为false)
llm_description: ''
max: null
min: null
name: enable_language_detector
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
params:
audio_params_format: ''
audio_params_speech_rate: ''
enable_language_detector: ''
speaker: ''
text: ''
provider_id: e2b4769f-5a09-444b-9066-5f4ca9967cc9
provider_name: 豆包TTS语音合成
provider_type: workflow
selected: false
title: 豆包TTS语音合成
tool_configurations: {}
tool_description: 豆包TTS语音合成
tool_label: 豆包TTS语音合成
tool_name: seed_gen_audio
tool_node_version: '2'
tool_parameters:
audio_params_format:
type: constant
value: mp3
audio_params_speech_rate:
type: constant
value: null
enable_language_detector:
type: constant
value: 'true'
speaker:
type: variable
value:
- '1766579221158'
- actor_voice_type
text:
type: mixed
value: '{{#1766579221158.result#}}'
type: tool
height: 93
id: '1766579307542'
parentId: '1766579168310'
position:
x: 1173.1992879026402
y: 75.93045507304487
positionAbsolute:
x: 117.8825858574969
y: 1516.6958276798887
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
code: "\n\n\n/**\n * 将浮点型字符串转换为向上取整的整数字符串\n * @param {string} floatStr - 浮点型字符串,如\
\ \"3.14\"、\"5.7\"、\"-2.3\"\n * @returns {string} 向上取整后的整数字符串\n * @throws\
\ {Error} 如果输入不是有效的数字字符串\n */\nfunction ceilFloatString(floatStr) {\n //\
\ 1. 验证输入是否为字符串\n if (typeof floatStr !== 'string') {\n throw new Error('输入必须是字符串类型');\n\
\ }\n \n // 2. 去除前后空格\n const trimmedStr = floatStr.trim();\n \n //\
\ 3. 验证是否为有效数字\n if (trimmedStr === '' || isNaN(trimmedStr) || trimmedStr\
\ === ' ') {\n throw new Error(`无效的数字字符串: \"${floatStr}\"`);\n }\n \
\ \n // 4. 使用 Math.ceil 向上取整\n const num = parseFloat(trimmedStr);\n \
\ const result = Math.ceil(num);\n \n // 5. 返回整数字符串\n return result.toString();\n\
}\n\nfunction parseDoubaoTTS(json) {\n if (json == null) {\n return\
\ null;\n }\n const audioUrl = json[0].url\n const duration = json[0].duration\n\
\ const ceilDuration = ceilFloatString(duration)\n return {\n \
\ duration: duration,\n ceilDuration: ceilDuration,\n audioUrl:\
\ audioUrl\n }\n}\n\n\nfunction parseNdAudioText(nd_json) {\n if (nd_json\
\ == null) {\n return null;\n }\n const json = JSON.parse(nd_json[0].result);\n\
\ const url = json.data.down_audio;\n const duration = json.data.audio_duration;\n\
\ const ceilDuration = Math.ceil(duration);\n return {\n duration:\
\ duration.toString(),\n ceilDuration: ceilDuration.toString(),\n \
\ audioUrl: url\n }\n}\n\nfunction main({nd_json, item, doubao_json, doubao_json1})\
\ {\n var audioResult = parseDoubaoTTS(doubao_json) || parseDoubaoTTS(doubao_json1)\
\ || parseNdAudioText(nd_json);\n\n audioResult.audioUrl = audioResult.audioUrl.replace('gcdncs.101.com',\
\ 'cs.101.com').replace('cdncs.101.com', 'cs.101.com');\n\n const newItem\
\ = {\n ...item,\n ...audioResult\n }\n return {\n \
\ result: newItem\n }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
outputs:
result:
children: null
type: object
selected: false
title: 装配 tts 资源到场景
type: code
variables:
- value_selector:
- '1767168888271'
- json
value_type: array[object]
variable: nd_json
- value_selector:
- '1766579168310'
- item
value_type: object
variable: item
- value_selector:
- '1766579307542'
- json
value_type: array[object]
variable: doubao_json
- value_selector:
- '1769510509007'
- json
value_type: array[object]
variable: doubao_json1
height: 53
id: '1766580740909'
parentId: '1766579168310'
position:
x: 1526.184379480382
y: 243.35733020189218
positionAbsolute:
x: 470.86767743523865
y: 1684.122702808736
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
error_handle_mode: terminated
height: 363
is_parallel: true
iterator_input_type: array[object]
iterator_selector:
- '1766579168310'
- output
output_selector:
- '1766632617565'
- result
output_type: array[object]
parallel_nums: 10
selected: false
start_node_id: 1766631985311start
title: 图生视频提示词优化套件
type: iteration
width: 1085
height: 363
id: '1766631985311'
position:
x: -449.9746639053287
y: 2187.9127466193163
positionAbsolute:
x: -449.9746639053287
y: 2187.9127466193163
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 1085
zIndex: 1
- data:
desc: ''
isInIteration: true
selected: false
title: ''
type: iteration-start
draggable: false
height: 48
id: 1766631985311start
parentId: '1766631985311'
position:
x: 24
y: 68
positionAbsolute:
x: -425.9746639053287
y: 2255.9127466193163
selectable: false
selected: false
sourcePosition: right
targetPosition: left
type: custom-iteration-start
width: 44
zIndex: 1002
- data:
code: "\nfunction main({item}) {\n const output = {\n id: item.id,\n\
\ narration: item.narration,\n visual_description: item.visual_description,\n\
\ visual_prompt: item.visual_prompt,\n include_character:\
\ item.include_character\n }\n const json = JSON.stringify(output);\n\
\ return {\n result: json\n }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766631985311'
outputs:
result:
children: null
type: string
selected: false
title: 提取场景信息
type: code
variables:
- value_selector:
- '1766631985311'
- item
value_type: object
variable: item
height: 53
id: '1766632013010'
parentId: '1766631985311'
position:
x: 124.93643624831634
y: 113.35811064773111
positionAbsolute:
x: -325.0382276570124
y: 2301.270857267047
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
audio:
configs:
variable_selector: []
enabled: false
context:
enabled: false
variable_selector: []
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766631985311'
model:
completion_params:
json_schema: "{\n \"type\": \"object\",\n \"properties\": {\n \"\
id\": {\n \"type\": \"number\"\n },\n \"motion_prompt\":\
\ {\n \"type\": \"string\"\n },\n \"camera_movement\": {\n\
\ \"type\": \"string\"\n },\n \"camera_movement_cn\": {\n\
\ \"type\": \"string\"\n },\n \"motion_intensity\": {\n \
\ \"type\": \"number\"\n },\n \"notes\": {\n \"type\"\
: \"string\"\n }\n },\n \"required\": [\n \"id\",\n \"motion_prompt\"\
,\n \"camera_movement\",\n \"camera_movement_cn\",\n \"motion_intensity\"\
,\n \"notes\"\n ],\n \"additionalProperties\": false\n}"
max_tokens: 32768
response_format: json_schema
thinking_type: enabled
mode: chat
name: doubao-seed-1-8-251228
provider: aict/ai_hub/ai_hub
prompt_template:
- id: ba340605-d9d7-4c90-8e8a-1ab210345f63
role: system
text: "# 图生视频提示词优化\n\n\n你是一位专业的AI视频生成提示词工程师,擅长为即梦(Jimeng)等图生视频模型编写高质量的运动提示词。\n\
\n\n## 任务\n根据场景信息和已生成的静态图片,为每个场景生成优化的图生视频提示词,使静态图片转化为具有电影感的动态视频。\n\n\n\
## 即梦提示词结构(必须遵守)\n\n\n```\n[运镜] + [主体微动] + [氛围特效]\n```\n\n\n### 1. 运镜类型\
\ (Camera Movement)\n\n\n| 运镜 | 英文 | 适用场景 | 示例 |\n|------|------|----------|------|\n\
| 推进 | Zoom In / Dolly Forward | 聚焦人物、强调细节、开篇引入 | `Slow cinematic zoom\
\ in` |\n| 拉远 | Zoom Out | 展示全景、结尾收束、表现孤独 | `Slow zoom out` |\n| 左移 |\
\ Pan Left | 场景扫描、追随动作 | `Cinematic pan left` |\n| 右移 | Pan Right | 场景扫描、时间流逝\
\ | `Slow pan right` |\n| 上移 | Tilt Up | 仰视建筑、展示高度 | `Slow tilt up` |\n\
| 下移 | Tilt Down | 俯视、从天到地 | `Slow tilt down` |\n| 跟随 | Tracking Shot\
\ | 跟随人物移动 | `Tracking shot` |\n| 固定 | Static | 特写、静态氛围、专注感 | `Static\
\ camera` |\n| 手持 | Handheld | 紧张感、不稳定、犹豫 | `Handheld camera movement`\
\ |\n| 环绕 | Orbit | 360度展示主体 | `Slow orbit around subject` |\n\n\n###\
\ 2. 主体微动 (Subject Motion)\n\n\n| 类型 | 适用对象 | 示例 |\n|------|----------|------|\n\
| 人物微动 | 头部/眼睛 | `turns head slightly`, `subtle blinking`, `eyes focusing\
\ sharply` |\n| 人物微动 | 身体 | `subtle body sway`, `breathing softly`, `shoulders\
\ slumping` |\n| 人物微动 | 手部 | `hand moving rhythmically`, `small precise\
\ movements` |\n| 人物静止 | 对比效果 | `remains perfectly still and stoic` |\n\
| 环境微动 | 植物 | `tall grass blowing in the wind`, `leaves rustling gently`\
\ |\n| 环境微动 | 织物 | `fabric fluttering slightly`, `tulle skirts moving`,\
\ `curtains blowing gently` |\n| 环境微动 | 水面 | `sunlight shimmering on water\
\ surface` |\n\n\n### 3. 氛围特效 (Atmosphere Effects)\n\n\n| 类型 | 示例 |\n\
|------|------|\n| 光影变化 | `cinematic lighting changes`, `changing shadows`,\
\ `light sweeping slowly` |\n| 丁达尔效应 | `dust particles floating in volumetric\
\ light beams (Tyndall effect)` |\n| 尘埃粒子 | `dust motes dancing in the\
\ light` |\n| 火焰光源 | `oil lamp flame flickering`, `warm gaslight flickering`\
\ |\n| 蒸汽烟雾 | `steam rising gently` |\n| 天空云朵 | `clouds drifting quickly\
\ across the sky` |\n| 动态光斑 | `dynamic light spots` |\n\n\n## 运镜选择规则\n\
\n\n| 场景类型 | 推荐运镜 | 运动幅度 |\n|----------|----------|----------|\n| 开篇/引入\
\ | Zoom In | 中等 (4-5) |\n| 人物特写 | Static / Slow Zoom | 极低 (2-3) |\n|\
\ 全景展示 | Zoom Out / Pan | 中等 (4-5) |\n| 动作跟随 | Tracking | 中高 (5-6) |\n\
| 对比反差 | Zoom Out | 低 (3-4) |\n| 紧张/犹豫 | Handheld | 低 (2-3) |\n| 静态画作\
\ | Pan (仅运镜) | 极低 (2-3) |\n| 深夜/沉思 | Slow Zoom Out | 低 (3-4) |\n| 建筑/空间\
\ | Tilt Up / Dolly | 中等 (4-5) |\n\n## 重要要求\n1. 绝对不能包含“黄政暴”相关内容\n2. 绝对不能包含裸体内容\n\
\n## 输入信息\n\n\n### 项目信息\n```json\n{{#1766565906395.projectInfoStr#}}}\n\
```\n\n\n### 场景信息\n```json\n{{#1766632013010.result#}}}}\n```\n\n\n字段说明:\n\
- `id`: 场景ID\n- `narration`: 旁白文案\n- `visual_description`: 视觉描述\n- `visual_prompt`:\
\ 文生图提示词(已生成的静态图)\n- `include_character`: 是否包含主角\n\n\n## 输出格式\n\n\n```json\n\
{\n \"id\": 1,\n \"motion_prompt\": \"完整的图生视频提示词(英文)\",\n \"camera_movement\"\
: \"运镜类型\",\n \"camera_movement_cn\": \"运镜中文\",\n \"motion_intensity\"\
: \"1-10 运动幅度建议\",\n \"notes\": \"特殊注意事项\"\n}\n```\n\n\n## 示例\n\n\n###\
\ 输入\n```json\n{\n \"id\": 5,\n \"narration\": \"但在他们中间,德加显得格格不入。\"\
,\n \"visual_description\": \"Medium shot of Degas standing apart from\
\ the group of painters\",\n \"include_character\": true\n}\n```\n\n\n\
### 输出\n```json\n{\n \"id\": 5,\n \"motion_prompt\": \"Slow zoom out,\
\ Degas remains perfectly still and stoic, while background artists move\
\ and paint busily, wind blowing clothes, contrast between stillness and\
\ motion, cinematic atmosphere.\",\n \"camera_movement\": \"Zoom Out\"\
,\n \"camera_movement_cn\": \"拉远\",\n \"motion_intensity\": 4,\n \"\
notes\": \"主角保持静止形成对比,背景人物有动作\"\n}\n```\n\n\n### 输入\n```json\n{\n \"\
id\": 11,\n \"narration\": \"那时候的他,痴迷于像相机一样精准的画面。\",\n \"visual_description\"\
: \"Close-up of Degas' face with intense analytical gaze\",\n \"include_character\"\
: true\n}\n```\n\n\n### 输出\n```json\n{\n \"id\": 11,\n \"motion_prompt\"\
: \"Extremely slow zoom in, subtle blinking, eyes focusing sharply, pupils\
\ adjusting, micro-expressions, high fidelity, 8k detail.\",\n \"camera_movement\"\
: \"Zoom In\",\n \"camera_movement_cn\": \"微推\",\n \"motion_intensity\"\
: 2,\n \"notes\": \"特写镜头,运动幅度要极低,强调眼神细节\"\n}\n```\n\n\n## 重要提示\n\n\n\
1. **英文输出**: 提示词必须使用英文,效果更精准\n2. **运动幅度**: 特写镜头用低幅度(2-3),全景用中等幅度(4-5)\n\
3. **静态画作**: 如果是展示画作,画中人不要动,只用运镜和光影\n4. **对比效果**: 可以让主角静止、背景运动,形成反差\n\
5. **氛围优先**: 每个场景至少包含一个氛围特效元素\n\n\n## 开始处理\n\n\n请根据以上规则,为输入的场景生成图生视频提示词。"
selected: false
structured_output:
schema:
additionalProperties: false
properties:
camera_movement:
type: string
camera_movement_cn:
type: string
id:
type: number
motion_intensity:
type: number
motion_prompt:
type: string
notes:
type: string
required:
- id
- motion_prompt
- camera_movement
- camera_movement_cn
- motion_intensity
- notes
type: object
structured_output_enabled: true
title: 优化图生视频提示词
type: llm
variables: []
video:
configs:
variable_selector: []
enabled: false
vision:
enabled: false
height: 121
id: '1766632190094'
parentId: '1766631985311'
position:
x: 432
y: 116.42167439941477
positionAbsolute:
x: -17.974663905328725
y: 2304.334421018731
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
code: "\nfunction main({ item,structured_output}) {\n const newItem = {\n\
\ ...item,\n ...structured_output\n }\n return {\n \
\ result: newItem\n }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766631985311'
outputs:
result:
children: null
type: object
selected: false
title: 装配图生视频提示词
type: code
variables:
- value_selector:
- '1766631985311'
- item
value_type: object
variable: item
- value_selector:
- '1766632190094'
- structured_output
value_type: object
variable: structured_output
height: 53
id: '1766632617565'
parentId: '1766631985311'
position:
x: 736
y: 116.42167439941477
positionAbsolute:
x: 286.0253360946713
y: 2304.334421018731
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
error_handle_mode: terminated
height: 673.3417675072399
is_parallel: true
iterator_input_type: array[object]
iterator_selector:
- '1766631985311'
- output
output_selector:
- '1766633797134'
- result
output_type: array[object]
parallel_nums: 10
selected: false
start_node_id: 1766632760253start
title: 生成视频片段套件
type: iteration
width: 1287.745744993265
height: 673
id: '1766632760253'
position:
x: -580.7089336491448
y: 2688.509080781484
positionAbsolute:
x: -580.7089336491448
y: 2688.509080781484
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 1288
zIndex: 1
- data:
desc: ''
isInIteration: true
selected: false
title: ''
type: iteration-start
draggable: false
height: 48
id: 1766632760253start
parentId: '1766632760253'
position:
x: 24
y: 68
positionAbsolute:
x: -556.7089336491448
y: 2756.509080781484
selectable: false
selected: false
sourcePosition: right
targetPosition: left
type: custom-iteration-start
width: 44
zIndex: 1002
- data:
code: "\n/**\n * 钳制数值到指定范围 [min, max]\n * @param {string} numStr - 字符串形式的整数\n\
\ * @param {number} min - 最小值(默认1)\n * @param {number} max - 最大值(默认12)\n\
\ * @returns {string} 钳制后的整数字符串\n */\nfunction clampNumberString(numStr,\
\ min = 1, max = 12) {\n // 1. 转换为数字\n const num = parseInt(numStr, 10);\n\
\ \n // 2. 检查是否为有效数字\n if (isNaN(num)) {\n throw new Error(`无效的数字字符串:\
\ \"${numStr}\"`);\n }\n \n // 3. 钳制到范围\n let clamped;\n if (num <\
\ min) {\n clamped = min;\n } else if (num > max) {\n clamped = max;\n\
\ } else {\n clamped = num;\n }\n \n // 4. 返回字符串\n return clamped.toString();\n\
}\n\nfunction safe_lip_sync(need_lip_sync) {\n if (need_lip_sync == null\
\ || need_lip_sync == \"\") {\n return 0;\n }\n return Number(need_lip_sync);\n\
}\n\nfunction main({item}) {\n const duration = item.shot_duration ||\
\ item.ceilDuration; // 根据时间戳计算的时长或 tts 时长\n const ceilDuration = clampNumberString(duration)\n\
\ return {\n image_url: item.image_url,\n motion_prompt:\
\ item.motion_prompt,\n ceilDuration: ceilDuration,\n audioUrl:\
\ item.audioUrl,\n need_lip_sync: safe_lip_sync(item.need_lip_sync)\n\
\ }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
outputs:
audioUrl:
children: null
type: string
ceilDuration:
children: null
type: string
image_url:
children: null
type: string
motion_prompt:
children: null
type: string
need_lip_sync:
children: null
type: number
selected: false
title: 获取图片地址和提示词和时长
type: code
variables:
- value_selector:
- '1766632760253'
- item
value_type: object
variable: item
height: 53
id: '1766632810839'
parentId: '1766632760253'
position:
x: 97.48292570624722
y: 69
positionAbsolute:
x: -483.2260079428976
y: 2757.509080781484
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
code: "\nfunction main({item, url, need_lip_sync, ceilDuration}) {\n const\
\ newItem = {\n ...item,\n videoUrl: url,\n ceilDuration\
\ : need_lip_sync == 1 ? item.duration : ceilDuration\n }\n return\
\ {\n result: newItem\n }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
outputs:
result:
children: null
type: object
selected: false
title: 装配视频地址
type: code
variables:
- value_selector:
- '1766632760253'
- item
value_type: object
variable: item
- value_selector:
- '1766637839537'
- url
value_type: string
variable: url
- value_selector:
- '1766632810839'
- need_lip_sync
value_type: number
variable: need_lip_sync
- value_selector:
- '1766632810839'
- ceilDuration
value_type: string
variable: ceilDuration
height: 53
id: '1766633797134'
parentId: '1766632760253'
position:
x: 984.2083309619272
y: 476.9462551526485
positionAbsolute:
x: 403.49939731278243
y: 3165.4553359341326
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
code: "\nfunction main({json, video_url}) {\n const url = video_url ||\
\ json[0].url\n return {\n url: url\n }\n}\n"
code_language: javascript
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
outputs:
url:
children: null
type: string
selected: true
title: 提取视频地址
type: code
variables:
- value_selector:
- '1779099074767'
- json
value_type: array[object]
variable: json
- value_selector:
- '1767611826573'
- video_url
value_type: string
variable: video_url
height: 53
id: '1766633846590'
parentId: '1766632760253'
position:
x: 963.7536439523323
y: 119.1536843003023
positionAbsolute:
x: 383.04471030318746
y: 2807.6627650817863
selected: true
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766632760253'
output_schema: null
outputs:
- type: string
value_selector:
- '1760867387289'
- url
variable: url
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 资源地址
ja_JP: 资源地址
pt_BR: 资源地址
zh_Hans: 资源地址
llm_description: ''
max: null
min: null
name: url
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 资源类型
ja_JP: 资源类型
pt_BR: 资源类型
zh_Hans: 资源类型
llm_description: ''
max: null
min: null
name: type
options:
- icon: null
label:
en_US: jpg/image
ja_JP: jpg/image
pt_BR: jpg/image
zh_Hans: jpg/image
value: jpg/image
- icon: null
label:
en_US: mp4/video
ja_JP: mp4/video
pt_BR: mp4/video
zh_Hans: mp4/video
value: mp4/video
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: select
params:
type: ''
url: ''
provider_id: 8e9ef31b-83d5-4a5a-a717-1e7d86250a62
provider_name: AI课件-资源转存
provider_type: workflow
selected: false
title: AI课件-资源转存
tool_configurations: {}
tool_description: 把外网的资源转存的ndr上
tool_label: AI课件-资源转存
tool_name: aic_resource_storage
tool_node_version: '2'
tool_parameters:
isCdn:
type: constant
value: 否
type:
type: constant
value: mp4/video
url:
type: mixed
value: '{{#1766633846590.url#}}'
type: tool
height: 93
id: '1766637839537'
parentId: '1766632760253'
position:
x: 992.8140989630824
y: 321.22335953774837
positionAbsolute:
x: 412.1051653139376
y: 3009.7324403192324
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
authorization:
config: null
type: no-auth
body:
data: []
type: none
desc: ''
headers: ''
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
method: get
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 100
selected: false
ssl_verify: true
timeout:
max_connect_timeout: 0
max_read_timeout: 0
max_write_timeout: 0
title: 下载图片到文件
type: http-request
url: '{{#1766632810839.image_url#}}'
variables: []
height: 125
id: '1766647889824'
parentId: '1766632760253'
position:
x: 411.6661839955682
y: 444.6083986192025
positionAbsolute:
x: -169.0427496535766
y: 3133.1174794006865
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 6b926b8e-52ff-4979-8c7a-c9b82c68bd27
value: 豆包2.0
varType: string
variable_selector:
- '1766579221158'
- actor_voice_source
id: 'true'
logical_operator: and
- case_id: c11347ba-0f2b-48c0-898e-6a88baa1a5cd
conditions:
- comparison_operator: contains
id: 35d3a167-6dde-4781-a076-d00abc461888
value: 豆包1.0
varType: string
variable_selector:
- '1766579221158'
- actor_voice_source
id: c11347ba-0f2b-48c0-898e-6a88baa1a5cd
logical_operator: and
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
selected: false
title: 条件分支 6
type: if-else
height: 173
id: '1767168795046'
parentId: '1766579168310'
position:
x: 812.9980375722414
y: 159.8624892274313
positionAbsolute:
x: -242.3186644729019
y: 1600.627861834275
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766579168310'
output_schema: null
outputs:
- type: string
value_selector:
- '1737085425314'
- body
variable: body
- type: string
value_selector:
- '17370953178210'
- body
variable: result
- type: string
value_selector:
- '1764819725877'
- url
value_type: string
variable: audio_url
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: 应用id
ja_JP: 应用id
pt_BR: 应用id
zh_Hans: 应用id
label:
en_US: 应用ID
ja_JP: 应用ID
pt_BR: 应用ID
zh_Hans: 应用ID
llm_description: 应用id
max: null
min: null
name: app_id
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: 应用密钥
ja_JP: 应用密钥
pt_BR: 应用密钥
zh_Hans: 应用密钥
label:
en_US: 应用密钥
ja_JP: 应用密钥
pt_BR: 应用密钥
zh_Hans: 应用密钥
llm_description: 应用密钥
max: null
min: null
name: app_key
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: 模型id
ja_JP: 模型id
pt_BR: 模型id
zh_Hans: 模型id
label:
en_US: 声音模型编码
ja_JP: 声音模型编码
pt_BR: 声音模型编码
zh_Hans: 声音模型编码
llm_description: 模型id
max: null
min: null
name: model
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: 参考音频id
ja_JP: 参考音频id
pt_BR: 参考音频id
zh_Hans: 参考音频id
label:
en_US: 参考音频编号,需要和模型编码配套
ja_JP: 参考音频编号,需要和模型编码配套
pt_BR: 参考音频编号,需要和模型编码配套
zh_Hans: 参考音频编号,需要和模型编码配套
llm_description: 参考音频id
max: null
min: null
name: ref_audio
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: 语言,可选
ja_JP: 语言,可选
pt_BR: 语言,可选
zh_Hans: 语言,可选
label:
en_US: 生成语音的语言
ja_JP: 生成语音的语言
pt_BR: 生成语音的语言
zh_Hans: 生成语音的语言
llm_description: 语言,可选
max: null
min: null
name: language
options:
- icon: null
label:
en_US: 中文
ja_JP: 中文
pt_BR: 中文
zh_Hans: 中文
value: 中文
- icon: null
label:
en_US: 粤语
ja_JP: 粤语
pt_BR: 粤语
zh_Hans: 粤语
value: 粤语
- icon: null
label:
en_US: 英文
ja_JP: 英文
pt_BR: 英文
zh_Hans: 英文
value: 英文
- icon: null
label:
en_US: 日文
ja_JP: 日文
pt_BR: 日文
zh_Hans: 日文
value: 日文
- icon: null
label:
en_US: 韩文
ja_JP: 韩文
pt_BR: 韩文
zh_Hans: 韩文
value: 韩文
- icon: null
label:
en_US: 中英混合
ja_JP: 中英混合
pt_BR: 中英混合
zh_Hans: 中英混合
value: 中英混合
- icon: null
label:
en_US: 粤英混合
ja_JP: 粤英混合
pt_BR: 粤英混合
zh_Hans: 粤英混合
value: 粤英混合
- icon: null
label:
en_US: 日英混合
ja_JP: 日英混合
pt_BR: 日英混合
zh_Hans: 日英混合
value: 日英混合
- icon: null
label:
en_US: 韩英混合
ja_JP: 韩英混合
pt_BR: 韩英混合
zh_Hans: 韩英混合
value: 韩英混合
- icon: null
label:
en_US: 多语种混合
ja_JP: 多语种混合
pt_BR: 多语种混合
zh_Hans: 多语种混合
value: 多语种混合
- icon: null
label:
en_US: 多语种混合(粤语)
ja_JP: 多语种混合(粤语)
pt_BR: 多语种混合(粤语)
zh_Hans: 多语种混合(粤语)
value: 多语种混合(粤语)
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: 语音文本内容
ja_JP: 语音文本内容
pt_BR: 语音文本内容
zh_Hans: 语音文本内容
label:
en_US: ' 待转成语音的文本内容'
ja_JP: ' 待转成语音的文本内容'
pt_BR: ' 待转成语音的文本内容'
zh_Hans: ' 待转成语音的文本内容'
llm_description: 语音文本内容
max: null
min: null
name: content
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: 语速,默认为1
ja_JP: 语速,默认为1
pt_BR: 语速,默认为1
zh_Hans: 语速,默认为1
label:
en_US: 语速
ja_JP: 语速
pt_BR: 语速
zh_Hans: 语速
llm_description: 语速,默认为1
max: null
min: null
name: speed
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: 其他参数,以json的格式输入
ja_JP: 其他参数,以json的格式输入
pt_BR: 其他参数,以json的格式输入
zh_Hans: 其他参数,以json的格式输入
label:
en_US: 其他的参数,以Json的格式输入
ja_JP: 其他的参数,以Json的格式输入
pt_BR: 其他的参数,以Json的格式输入
zh_Hans: 其他的参数,以Json的格式输入
llm_description: 其他参数,以json的格式输入
max: null
min: null
name: other_params
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: string
params:
app_id: ''
app_key: ''
content: ''
language: ''
model: ''
other_params: ''
ref_audio: ''
speed: ''
provider_id: 1dfe06b5-c6cc-4a8d-b92e-cc6b958c1a79
provider_name: NDTTS-文本转语音(比如:任运)
provider_type: workflow
selected: false
title: NDTTS-文本转语音(比如:任运)
tool_configurations: {}
tool_description: 按角色,比如:任运
tool_label: NDTTS-文本转语音(比如:任运)
tool_name: NDTTS
tool_node_version: '2'
tool_parameters:
app_id:
type: mixed
value: D982E9D2
app_key:
type: mixed
value: UqlJVIyN5r8Ws1c4
content:
type: mixed
value: '{{#1766579221158.result#}}'
language:
type: constant
value: 中文
model:
type: constant
value: 10046
other_params:
type: mixed
value: null
ref_audio:
type: constant
value: 10174
speed:
type: mixed
value: null
type: tool
height: 93
id: '1767168888271'
parentId: '1766579168310'
position:
x: 1163.0241159501666
y: 396.0626615885328
positionAbsolute:
x: 107.70741390502326
y: 1836.8280341953766
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
audio:
configs:
variable_selector: []
enabled: false
context:
enabled: false
variable_selector: []
desc: ''
model:
completion_params:
json_schema: "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\
,\n \"title\": \"Art Project Schema\",\n \"description\": \"Schema\
\ for art project configuration with scenes\",\n \"type\": \"object\"\
,\n \"required\": [\n \"project_info\",\n \"scenes\"\n ],\n\
\ \"properties\": {\n \"project_info\": {\n \"type\": \"object\"\
,\n \"description\": \"Project metadata and global settings\",\n\
\ \"required\": [\n \"title\",\n \"global_style\"\
\n ],\n \"properties\": {\n \"title\": {\n \
\ \"type\": \"string\",\n \"description\": \"Project title\"\
,\n \"minLength\": 1\n },\n \"global_style\"\
: {\n \"type\": \"string\",\n \"description\": \"\
Global artistic style description\",\n \"minLength\": 1\n \
\ }\n },\n \"additionalProperties\": false\n },\n\
\ \"scenes\": {\n \"type\": \"array\",\n \"description\"\
: \"List of scenes in the project\",\n \"minItems\": 1,\n \
\ \"items\": {\n \"type\": \"object\",\n \"description\"\
: \"Individual scene configuration\",\n \"required\": [\n \
\ \"id\",\n \"narration\",\n \"target_narration\"\
,\n \"visual_description\",\n \"visual_prompt\",\n\
\ \"need_lip_sync\",\n \"has_character\",\n \
\ \"characters\",\n \"narrator_name\"\n ],\n \
\ \"properties\": {\n \"id\": {\n \"type\": \"\
integer\",\n \"description\": \"Unique identifier for the\
\ scene\",\n \"minimum\": 1\n },\n \"narration\"\
: {\n \"type\": \"string\",\n \"description\"\
: \"Relevant sentence extracted from script\",\n \"minLength\"\
: 1\n },\n \"target_narration\": {\n \"\
type\": \"string\",\n \"description\": \"Narration translated\
\ to the target language (or identical copy when no translation is needed)\"\
,\n \"minLength\": 1\n },\n \"visual_description\"\
: {\n \"type\": \"string\",\n \"description\"\
: \"Director's note for visual direction\",\n \"minLength\"\
: 1\n },\n \"visual_prompt\": {\n \"type\"\
: \"string\",\n \"description\": \"Full English prompt for\
\ image generation\",\n \"minLength\": 1\n },\n\
\ \"need_lip_sync\": {\n \"type\": \"string\",\n\
\ \"description\": \"Whether the scene requires lip-sync\
\ alignment for the narration\"\n },\n \"has_character\"\
: {\n \"type\": \"number\",\n \"description\"\
: \"has character\"\n },\n \"characters\": {\n \
\ \"type\": \"array\",\n \"items\": {\n \
\ \"type\": \"string\"\n },\n \"description\"\
: \"List of on-screen actor names selected from actors_json. Empty array\
\ when has_character=0\"\n },\n \"narrator_name\"\
: {\n \"type\": \"string\",\n \"description\"\
: \"narrator name\"\n }\n },\n \"additionalProperties\"\
: false\n }\n }\n },\n \"additionalProperties\": false\n}"
max_completion_tokens: 128000
response_format: json_schema
mode: chat
name: gpt-5.1-2025-11-13
provider: aict/ai_hub/ai_hub
prompt_template:
- id: f9d2de94-de8d-4902-91b7-eef448308aae
role: system
text: "## 角色(Role)\n你是一名资深的 AI 视频导演与提示词工程师。请把给定的【独白讲稿】(已按指定 SCENE 标记格式提供)转换为\
\ JSON 分镜脚本,并且必须严格符合下方 JSON Schema 与全部约束。\n\n---\n\n## 固定项目设置(输出中必须写入\
\ project_info)\n【Global Style Prompt】(输出中必须原样使用):{{#1768184532311.global_style#}}\n\
【Actors JSON】(本项目可用角色全集;包含同一角色的不同变体,如“...(青年)”、“...(老年)”):\n{{#1768803191521.actors_text#}}\n\
\n**硬规则(角色相关):**\n- `has_character` 的判断只依据“该场景是否需要可见人物出镜承载信息”,与是否能选到角色无关。\n\
- 角色一致性来源:按 name 在 Actors JSON 中匹配(仅使用 name;不要使用/输出 actor.prompt)。\n-\
\ 不要在 visual_description / visual_prompt 中描述角色风格(如外貌设定清单、固定服装口号等一致性锚定语),也不要写任何\
\ url。\n\n---\n\n年代与世界观\n0) 核心目标(必须达成)\n从剧本【年代设定】中抽取“唯一年代/世界观”并在全片锁死为 ERA_LOCK。除非剧本明确标注“穿越/回忆/史料插叙”,否则所有分镜必须严格属于\
\ ERA_LOCK,每个分镜都不得出现任何超出该年代上限的产物、材料、工艺、语言符号与审美风格(含“看起来很现代”的装修与灯具)。\n1)\
\ 年代设定解析(Era Profile:先建模再出画面)\n读取【年代设定】后,为本片构建一个 Era Profile(仅用于推理与约束,不写入输出字段):\n\
TIME_RANGE(时间范围):把“唐朝/维多利亚/1980s/近未来”等映射为一个近似范围:era_start ~ era_end(至少要确定 era_end 作为“时代上限”)。\n\
REGION/CULTURE(地域文化):中国/法国/美国/架空赛博城市等,用于建筑、服饰、文字系统、器物风格约束。\nTECH_CEILING(技术上限):以 era_end 为准设定“允许出现的最高技术形态”(照明、动力、交通、通信、材料、印刷/显示介质)。\n\
STYLE_PALETTE(风格调色板):该时代常见的室内/街景形制、材质与工艺(木/石/砖/夯土/黄铜/铸铁/丝绸/羊毛等),以及不应出现的“后世风格信号”。\n\
2) 年代强制约束(Anachronism Check,硬失败条件)\n对每个 scene 的 visual_description 与 visual_prompt 执行以下硬约束:\n\
全篇统一:无明确“穿越/回忆”标注则不得换年代,不得混搭两种时代的建筑/服装/道具体系。\n双向时代错误都禁止:\n过新(最常见):出现任何晚于\
\ era_end 的产物/材料/工业语言 = 违规。\n过旧且不合理:在明确“现代商务/当代都市”等年代里无理由出现古装、马车、冷兵器体系等也属违规(除非\
\ META/VISUAL 明确是表演/博物馆/影视拍摄/复古活动)。\n角色造型年代一致:服装材质、剪裁、发型、配饰、鞋型必须匹配 Era\
\ Profile 的阶层与地域文化;不得用“现代时装语汇”去描述古代/近代角色。\n3) “每个分镜必须带年代锚点”的硬要求(防漂移关键)\n\
为防止模型默认生成“现代室内/现代灯具/现代装修”,每个 scene 必须满足:\nvisual_description 必须包含至少 1\
\ 个“年代锚点(Era Anchor)”:来自该年代典型的 光源/材质/器物/建筑细节/交通方式/文字载体 任一类。\n例(仅示意,需按【年代设定】动态选择):油灯/蜡烛/煤气灯/早期白炽灯语汇;木作榫卯/夯土院落/砖石拱券;马车/帆船/蒸汽机车;竹简/宣纸/羊皮纸/打字机/胶片相机;等。\n\
visual_prompt 必须显式重复年代标签:写入 historically accurate to [年代设定] 或 era-accurate:\
\ [年代设定],并要求 no anachronistic objects。\n4) 高风险漂移项:强制“时代化”处理(重点针对你反馈的灯具/装修)\n\
以下类别最容易在任何年代设定下“自动现代化”,必须强约束:\n照明(Lighting Source):必须符合 TECH_CEILING。\n\
禁止默认“现代筒灯/射灯/灯带/LED/荧光灯/极简台灯”。\n若需室内补光,优先用“当时代真实光源语汇”描述(如窗光、烛光、油灯、煤气灯、当时代早期电灯形制等;具体取决于【年代设定】)。\n\
室内装修与家具(Interior Style):\n禁止出现“现代极简、白盒子、开放式厨房吧台、隐形灯槽、无框玻璃、现代橱柜五金、塑料感强的家具”等后世风格信号。\n\
必须用 Era Profile 的材质与工艺词汇(木、石、砖、灰泥、织物、金属工艺等)去落实空间。\n材料(Materials):若【年代设定】早于大规模塑料/现代复合材料普及,则禁止“塑料、亚克力、碳纤维、铝合金现代加工质感、不锈钢家电质感”等。\n\
文字/标识介质(Typography & Signage):禁止出现明显现代 UI、现代印刷排版、LED屏、现代路牌体系;必须匹配时代的招牌/海报/题字方式。\n\
5) 输出前强制自检(每个 scene 必做)\n在生成每个 scene 的画面前,执行一次 Self‑Check(推理步骤,不写入输出):\n\
列出该镜头将出现的:light source / key props / furniture / architecture / transport\
\ / materials / signage / costume\n对每一项问一句:“它是否可能晚于 era_end 才出现或普及?是否带有明显后世审美信号?”\n\
若“是/不确定” → 必须替换为更符合年代的替代物,直到通过。\n\n任务目标(核心功能)\n把讲稿按“原文顺序”拆成多个可拍摄分镜场景:\n\
智能开场(Smart Intro):\n若第一句是旁白(VO):Scene 1 必须是环境/情景空镜(Establishing Shot),禁止\
\ Talking Head。\n若第一句是角色台词(Dialogue):Scene 1 必须是主角面对镜头自述(Talking Head)。\n\
首个对白镜头(First Dialogue Shot):全片中第一个由“非旁白角色”说话的场景,必须处理为 Talking Head(对镜自述/特写),以建立角色印象。\n\
Scene 2+(其余场景):以“正常演绎/情景化呈现”为主(第三人称叙事、动作、特写等)。当某场景被判定为 First Dialogue\
\ Shot 时,禁止使用视角 A/B 随机切换规则;必须 Talking Head,need_lip_sync=1。\nFirst Dialogue\
\ Shot(可执行判定)\n定义 IS_VO:满足任一条件即为 VO/旁白场景\nSPEAKER 含 “旁白” 或 “VO”(可选)MODE:\
\ VO 仅在 SPEAKER 不是角色发声标签时才算 VO\n硬例外(最高优先级):如果 SPEAKER 形如 独白(角色名)/对话(角色名)/角色名,则该场景一律视为 IS_CHARACTER_SPEECH,即使\
\ MODE=VO 也不得当作 VO。\n同时把 IS_CHARACTER_SPEECH 改成“不受 MODE 影响”:\n定义 IS_CHARACTER_SPEECH:满足任一条件即为角色发声场景\n\
SPEAKER 为角色名,或形如 独白(角色名)/对话(角色名)\n且 SPEAKER 不含 旁白/VO\n不要求 MODE 必须是 ONCAM/DIALOGUE(MODE\
\ 可忽略)\n定义 IS_CHARACTER_SPEECH:满足全部条件才算“角色发声场景”\n非 IS_VO\nSPEAKER 为角色名,或形如 独白(角色名) / 对话(角色名)(括号内为角色名)\n\
全片第一个 IS_CHARACTER_SPEECH 场景 = First Dialogue Shot:\n必须 has_character=1\n\
必须 need_lip_sync=1\n角色必须 面对镜头(looking at camera),嘴部可见(mouth visible),执行对口型\n\
visual_prompt 必须使用 Talking Head 模板\n特别强调(防误判)\n任意 IS_VO 场景 永远不计入 “首次亮相/首个对白镜头”,即使 SPEAKER=旁白(某角色名),也只视为\
\ VO,不触发 lip sync。\nHard Priority Order(硬优先级,冲突时按此执行)\nSchema/字段硬规则(JSON\
\ keys、narration 来源、characters 约束等)\nSmart Intro(只约束 Scene 1 的镜头类型)\n\
First Dialogue Shot(全片第一次“角色在非 VO 条件下发声”必须 Talking Head + lip sync)\n\
Talking Head 严格限制 / 独白多样化(仅在不违反 2/3 的前提下执行)\n输入格式与解析规则(完整定义)\n输入讲稿由若干块组成,每块以如下行开始:\n\
[SCENE <number>] 块内允许的行类型(按需出现):\nMETA: 时间/地点/背景设定(不可朗读)\nVISUAL: 画面动作/调度/镜头提示(不可朗读)\n\
SFX: 音效/环境声(不可朗读)\nSPEAKER: 说话者名字(元信息,不可朗读)。特别注意:此处内容可能为 角色名 或 旁白类型(角色名)(如:旁白(任运)、独白(莱顿)),需解析括号内容。\n\
MODE: 说话方式(ONCAM/VO/DIALOGUE)(元信息,不可朗读)\nLINE: 唯一可朗读文本(供 narration 抽取)\n\
\n硬规则:\nnarration 只能来自 LINE: 行的内容(不包含“LINE:”前缀本身)。\n严禁把 META/VISUAL/SFX/SPEAKER/MODE\
\ 的任何字符放进 narration。\n输出要求(严格:必须符合 Schema)\n只返回合法 JSON(不要 markdown、不要代码块、不要注释、不要多余解释文字)。\
\ 顶层 JSON 必须是以下结构:\n{\n \"project_info\": {\n \"title\": \"...\",\n\
\ \"global_style\": \"...\"\n },\n \"scenes\": [...]\n}\n\n强制规则:\n\
project_info.global_style 必须与【Global Style Prompt】完全一致(逐字相同)。\n每个 scene\
\ 对象只能包含以下键(不得多、不得少):\n{ \"id\", \"narration\", \"visual_description\"\
, \"visual_prompt\", \"has_character\", \"need_lip_sync\", \"characters\"\
, \"narrator_name\" }\nhas_character 必须为数字 0 或 1(禁止 true/false,禁止字符串)。\n\
need_lip_sync 必须为数字 0 或 1(禁止 true/false,禁止字符串)。\nnarrator_name 必须为字符串(String),且严禁为空字符串。\n\
characters 必须存在:\n当 has_character=1:characters 为对象数组;每个对象只能有 name。\nname\
\ 必须能在 Actors JSON 的 actors[].name 中找到完全一致的项;\n允许多角色同框。\n当 has_character=0:characters\
\ 必须为 []。\n任何位置都不允许出现额外字段(additionalProperties=false)。\nid 使用严格递增的整数(1,2,3...),不得使用\
\ 2a/2b。\nnarrator_name 字段强制赋值逻辑(核心优化:全局一致性)\nnarrator_name 定义了当前分镜声音的归属。必须严格区分“角色音”与“旁白音”。\
\ 请对每个分镜执行以下 **Priority Check(优先级检查)**,一旦满足条件立即停止并赋值: 优先级 1:显式指定名字(Explicit\
\ Assignment) 情况 A:命名旁白(Named Narrator)- 最高优先级\n识别条件:SPEAKER 包含“旁白”或“VO”关键词,并且\
\ 带有括号指定名字(例如:旁白(任运))。\n执行动作:\n提取括号内的名字(如 \"任运\")。\n直接赋值 narrator_name\
\ = \"任运\"。\n记录:将此名字标记为“当前全局旁白音”。\n情况 B:角色独白/对话(Character Speech)\n识别条件:SPEAKER\
\ 是角色名(如 莱顿) 或 独白(角色名)(如 独白(莱顿))。\n执行动作(需映射到全名):\n提取核心名字(如 \"莱顿\")。\n\
历史锚定检查:若前文已将“莱顿”映射为“弗雷德里克·莱顿(中老年)”,则强制复用该全名。\n全名查找:若无历史,则在 Actors JSON\
\ 中查找包含该名字的项。\n赋值 narrator_name = 找到的官方全名。\n优先级 2:通用旁白 + 全局历史回溯(Global\
\ History Lookup)\n条件:SPEAKER 仅为“旁白”或“VO”(无括号指定名字)。\n逻辑:通用旁白通常由同一个声音完成。\n\
执行动作:\n检查整个剧本的前文(Previous Scenes),是否曾经出现过 “命名旁白(优先级1-A)”?\n若有(例如 Scene\
\ 1 是 旁白(任运)):则当前分镜继承该名字 -> narrator_name = \"任运\"。\n若无:进入优先级 3。\n优先级\
\ 3:通用旁白 + 默认兜底(Default Fallback)\n条件:SPEAKER 仅为“旁白”或“VO”,且前文从未指定过旁白名字。\n\
执行动作:\n直接赋值 narrator_name = \"旁白\"。\n严禁使用当前画面中的角色名字(characters),也严禁使用上一句说话的角色名字。\n\
\nnarration 原文锁定规则(最高优先级)\nnarration 必须从【讲稿原文】中“逐字逐符号”复制粘贴得到:一个字符都不许变。\n\
允许的唯一操作:切分(segmentation)。\n你只能把原文拆成多段;每段 narration 必须是原文中的“连续子串”。\nscenes\
\ 的 narration 必须按原文出现顺序输出;不得重排;不得跳跃拼接非相邻片段。\n关键规则:LINE 过长时的“多场景切分输出”\n\
对每个 [SCENE k] 块的 LINE 都必须进行切分评估;当 LINE 过长时,必须把同一块扩展为多个输出 scene,且保持该块的\
\ META/VISUAL/SPEAKER/MODE 语义一致。\n1) 必须切分的触发条件\n预计单段朗读 > 12 秒;\n单段包含 >\
\ 2 个完整句子;\n单段语义明显包含多个核心点。\n2) 切分方式\n只能在原文已有自然边界切分(标点符号)。\n不得自行添加或改动任何标点。\n\
3) 信息继承(硬约束)\n当 [SCENE k] 被切分为 n 段时:\n必须按顺序生成 n 个 scene。\n所有切分出的 scene\
\ 必须保持 narrator_name 一致(遵循上述赋值规则)。\n视觉风格与对口型策略(Visual Variety & Lip Sync)\n\
核心原则:除了“首次亮相”,独白应被视为“心声(Inner Voice)”,画面应多样化。\n1) Talking Head(对镜自述)的严格限制\n\
Talking Head 镜头(need_lip_sync=1,角色看着镜头说话)仅限用于以下情况:\nScene 1:如果第一句就是角色独白。\n\
首次亮相:全片第一个由主角说话的场景。\n特殊强调:剧本 VISUAL 中明确写有 \"Facing camera\" / \"Interview\
\ style\" / \"Talking to audience\"。\n除此之外,严禁使用 Talking Head。\n2) 独白的多样化视觉呈现(Scene\
\ 2+)\n当 SPEAKER 是角色(独白模式),且不是上述 Talking Head 情况时,必须在以下两种视角中随机切换,并强制 need_lip_sync=0:\n\
视角 A:第三人称动作(Cinematic Action)\n画面内容:角色正在进行某种动作(绘画、行走、凝视远方、抚摸物体)。\nVisual\
\ Prompt:medium shot / long shot, side profile or back view, [action description],\
\ cinematic lighting\n约束:need_lip_sync = 0(嘴巴不动,声音作为画外音)。\n视角 B:第一人称/特写(POV\
\ / Close-up)\n画面内容:角色眼中的画面(手部特写、画笔特写、环境细节),或者角色的局部特写(眼睛、手)。\nVisual Prompt:close\
\ up shot, POV shot, focus on [object/hand/eye], macro details, depth\
\ of field\n约束:need_lip_sync = 0(看不见嘴,或嘴不动)。\n3) 旁白模式(VO)\n始终保持 Cinematic\
\ 风格(空镜、环境、意境)。\nneed_lip_sync = 0。\n主角识别与角色选择策略(含变体选择)\n原则:先确定 SPEAKER\
\ 类型,再决定画面。\n1) 旁白/画外音模式(SPEAKER 含 VO/旁白 关键词)\n画面判定:严禁直接将 SPEAKER 中的名字作为画面角色。必须仅根据\
\ VISUAL/META 决定。\n2) 正常对话/独白模式(SPEAKER 为正常角色名)\n变体选择规则:若 Actors JSON\
\ 中存在同名角色的多个变体(如 青年/老年):\n优先检查 META 块中的时间/年龄提示。\n其次检查 VISUAL 块中的外貌描述。\n\
若无明确提示,默认保持与上一场景中该角色出场时的变体一致。\n匹配规则:必须使用 Actors JSON 中的全名(如“弗雷德里克·莱顿(中老年)”)。\n\
画面字段规则(Visual Rules)\n1) visual_description(English only)\n1–2 句,具体可执行。\n\
一致性检查:\nneed_lip_sync=1:必须描述“on-screen speaking / mouth visible, looking\
\ at camera”。\nneed_lip_sync=0:不得描述角色在说话。描述动作(painting, touching, walking)或细节(hands,\
\ eyes, canvas)。\nMust include at least one era anchor that matches [年代设定] (lighting/props/architecture/materials/transport/signage).\n\
Must avoid any modern/late-era cues if the era is earlier (e.g., modern\
\ lamp, recessed ceiling lights, minimalist renovation, plastic objects,\
\ screens).\nIf uncertain, choose a simpler, lower-tech, older alternative\
\ consistent with the era.\n2) visual_prompt(English only)\n必须以【Global\
\ Style Prompt】原样开头。\nTalking Head 模式(仅当 need_lip_sync=1 时):\n[Global\
\ Style Prompt], talking head, medium shot, looking at camera, natural\
\ lip movement, soft key light\nCinematic / Action 模式(当 need_lip_sync=0\
\ 且 has_character=1 时):\n[Global Style Prompt], cinematic shot, side view\
\ or back view, [action details], realistic lighting, closed mouth\nPOV\
\ / Detail 模式(当 need_lip_sync=0 且 has_character=1 时):\n[Global Style Prompt],\
\ close up shot, macro details, focus on hands or objects, depth of field\n\
在每条模板中强制加入:historically accurate to [年代设定], era-accurate props and architecture,\
\ no anachronistic objects, no modern lighting, no modern interior\n且不得使用会诱发现代化的泛词:modern, contemporary, minimalist, IKEA, LED, neon, fluorescent, recessed\
\ lights, light strip(除非【年代设定】本就是现代/未来且合理)。"
- id: dcb95686-5577-463a-b1d3-dbaf705129bc
role: user
text: '
# Source Text
{{#1768990832178.text#}}'
selected: false
structured_output:
schema:
$schema: http://json-schema.org/draft-07/schema#
additionalProperties: false
description: Schema for art project configuration with scenes
properties:
project_info:
additionalProperties: false
description: Project metadata and global settings
properties:
global_style:
description: Global artistic style description
minLength: 1
type: string
title:
description: Project title
minLength: 1
type: string
required:
- title
- global_style
type: object
scenes:
description: List of scenes in the project
items:
additionalProperties: false
description: Individual scene configuration
properties:
characters:
description: List of on-screen actor names selected from actors_json.
Empty array when has_character=0
items:
type: string
type: array
has_character:
description: has character
type: number
id:
description: Unique identifier for the scene
minimum: 1
type: integer
narration:
description: Relevant sentence extracted from script
minLength: 1
type: string
narrator_name:
description: narrator name
type: string
need_lip_sync:
description: Whether the scene requires lip-sync alignment for
the narration
type: string
target_narration:
description: Narration translated to the target language (or
identical copy when no translation is needed)
minLength: 1
type: string
visual_description:
description: Director's note for visual direction
minLength: 1
type: string
visual_prompt:
description: Full English prompt for image generation
minLength: 1
type: string
required:
- id
- narration
- target_narration
- visual_description
- visual_prompt
- need_lip_sync
- has_character
- characters
- narrator_name
type: object
minItems: 1
type: array
required:
- project_info
- scenes
title: Art Project Schema
type: object
structured_output_enabled: true
title: 独白-统一角色版本
type: llm
variables: []
video:
configs:
variable_selector: []
enabled: false
vision:
enabled: false
height: 121
id: '1767513600761'
position:
x: 219.8963342269864
y: -417.5372345420261
positionAbsolute:
x: 219.8963342269864
y: -417.5372345420261
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
cases:
- case_id: 0c081d5e-e816-41a9-a860-7e10b654ac47
conditions:
- comparison_operator: not empty
id: c67a6802-cadf-4db7-86ba-1596a76eea44
value: ''
varType: string
variable_selector:
- '1765354062480'
- timestamped_lines
id: 0c081d5e-e816-41a9-a860-7e10b654ac47
logical_operator: and
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 330c0caf-3cb1-469b-a564-3c2b8ef2fcca
value: 独白
varType: string
variable_selector:
- '1765354062480'
- scene_mode
id: 'true'
logical_operator: and
- case_id: 368673b3-3987-4923-80f8-eee8e3477fe3
conditions:
- comparison_operator: contains
id: f5fcce3b-79f8-4445-9bc4-92a03465148e
value: 旁白
varType: string
variable_selector:
- '1765354062480'
- scene_mode
id: 368673b3-3987-4923-80f8-eee8e3477fe3
logical_operator: and
desc: ''
selected: false
title: 条件分支 7
type: if-else
height: 221
id: '1767513946983'
position:
x: -1145.2642840255203
y: -417.5372345420261
positionAbsolute:
x: -1145.2642840255203
y: -417.5372345420261
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766632760253'
output_schema: null
outputs:
- type: any
value_selector:
- '1764222660299'
- output
value_type: string
variable: error_message
- type: string
value_selector:
- '1764676748859'
- video_url
value_type: string
variable: video_url
- type: string
value_selector:
- '1764676712844'
- mask_url
value_type: string
variable: mask_url
paramSchemas:
- auto_generate: null
default: null
form: form
human_description:
en_US: 仅限 jpg、png、jfif 等常见格式,建议 jpg 格式;体积小于 5MB,分辨率小于 4096×4096
ja_JP: 仅限 jpg、png、jfif 等常见格式,建议 jpg 格式;体积小于 5MB,分辨率小于 4096×4096
pt_BR: 仅限 jpg、png、jfif 等常见格式,建议 jpg 格式;体积小于 5MB,分辨率小于 4096×4096
zh_Hans: 仅限 jpg、png、jfif 等常见格式,建议 jpg 格式;体积小于 5MB,分辨率小于 4096×4096
label:
en_US: 图像地址
ja_JP: 图像地址
pt_BR: 图像地址
zh_Hans: 图像地址
llm_description: 仅限 jpg、png、jfif 等常见格式,建议 jpg 格式;体积小于 5MB,分辨率小于 4096×4096
max: null
min: null
name: image_url
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: form
human_description:
en_US: 时长必须小于 35 秒
ja_JP: 时长必须小于 35 秒
pt_BR: 时长必须小于 35 秒
zh_Hans: 时长必须小于 35 秒
label:
en_US: 音频地址
ja_JP: 音频地址
pt_BR: 音频地址
zh_Hans: 音频地址
llm_description: 时长必须小于 35 秒
max: null
min: null
name: audio_url
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: form
human_description:
en_US: 仅限中文、英文、日文、韩文、墨西哥语、印尼语
ja_JP: 仅限中文、英文、日文、韩文、墨西哥语、印尼语
pt_BR: 仅限中文、英文、日文、韩文、墨西哥语、印尼语
zh_Hans: 仅限中文、英文、日文、韩文、墨西哥语、印尼语
label:
en_US: 提示词
ja_JP: 提示词
pt_BR: 提示词
zh_Hans: 提示词
llm_description: 仅限中文、英文、日文、韩文、墨西哥语、印尼语
max: null
min: null
name: prompt
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: form
human_description:
en_US: 作为确定扩散初始状态的基础,默认 -1(随机)
ja_JP: 作为确定扩散初始状态的基础,默认 -1(随机)
pt_BR: 作为确定扩散初始状态的基础,默认 -1(随机)
zh_Hans: 作为确定扩散初始状态的基础,默认 -1(随机)
label:
en_US: 随机种子
ja_JP: 随机种子
pt_BR: 随机种子
zh_Hans: 随机种子
llm_description: 作为确定扩散初始状态的基础,默认 -1(随机)
max: null
min: null
name: seed
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: 否
form: form
human_description:
en_US: 开启后会通过牺牲部分效果加快生成速度,且生成视频的效果会与即梦稍有不同
ja_JP: 开启后会通过牺牲部分效果加快生成速度,且生成视频的效果会与即梦稍有不同
pt_BR: 开启后会通过牺牲部分效果加快生成速度,且生成视频的效果会与即梦稍有不同
zh_Hans: 开启后会通过牺牲部分效果加快生成速度,且生成视频的效果会与即梦稍有不同
label:
en_US: 快速模式
ja_JP: 快速模式
pt_BR: 快速模式
zh_Hans: 快速模式
llm_description: 开启后会通过牺牲部分效果加快生成速度,且生成视频的效果会与即梦稍有不同
max: null
min: null
name: pe_fast_mode
options:
- icon: null
label:
en_US: 是
ja_JP: 是
pt_BR: 是
zh_Hans: 是
value: 是
- icon: null
label:
en_US: 否
ja_JP: 否
pt_BR: 否
zh_Hans: 否
value: 否
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
params:
audio_url: ''
image_url: ''
pe_fast_mode: ''
prompt: ''
seed: ''
provider_id: 31e79e87-ac19-416d-a8fe-c36521c0d2b8
provider_name: 即梦数字人生成
provider_type: workflow
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 1000
selected: false
title: 即梦数字人生成
tool_configurations:
audio_url:
type: mixed
value: '{{#1766632810839.audioUrl#}}'
image_url:
type: mixed
value: '{{#1766632810839.image_url#}}'
pe_fast_mode:
type: constant
value: 否
prompt:
type: mixed
value: '{{#1766632810839.motion_prompt#}}'
seed:
type: constant
value: null
tool_description: 即梦数字人生成,生成的视频链接有效期为 2 个小时
tool_label: 即梦数字人生成
tool_name: jimeng_realman
tool_node_version: '2'
tool_parameters:
skip_subject_detection:
type: constant
value: 'false'
type: tool
height: 250
id: '1767611826573'
parentId: '1766632760253'
position:
x: 508.8804968821719
y: 95.35775265398252
positionAbsolute:
x: -71.82843676697291
y: 2783.8668334354666
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: '='
id: 0225124a-33ab-4016-bbfa-6302d7ea1bd6
value: '1'
varType: number
variable_selector:
- '1766632810839'
- need_lip_sync
id: 'true'
logical_operator: and
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766632760253'
selected: false
title: 是否需要对口型
type: if-else
height: 125
id: '1767612074064'
parentId: '1766632760253'
position:
x: 102.97342519537301
y: 218.39409891554533
positionAbsolute:
x: -477.7355084537718
y: 2906.9031796970294
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: '='
id: 6fd3abc0-34ea-4749-8a42-a06f931ec73d
value: '1'
varType: number
variable_selector:
- '1766574094213'
- has_character
- comparison_operator: not empty
id: b4ebfcd7-6adb-4cc5-8176-cf9c735795e5
value: ''
varType: array[string]
variable_selector:
- '1766574094213'
- actor_urls
id: 'true'
logical_operator: and
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766574059102'
selected: false
title: 是否需要主角
type: if-else
height: 151
id: '1767710910480'
parentId: '1766574059102'
position:
x: 408.7323935471123
y: 138.31806655805144
positionAbsolute:
x: -41.242270358216444
y: 935.8835916756393
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: 不使用垫图
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766574059102'
output_schema: null
outputs:
- type: any
value_selector:
- '1753035060851'
- error
variable: error_message
- type: any
value_selector:
- '1753289226679'
- url_list
variable: url_list
paramSchemas:
- auto_generate: null
default: doubao-seedream-4-0-250828
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 模型
ja_JP: 模型
pt_BR: 模型
zh_Hans: 模型
llm_description: ''
max: null
min: null
name: model
options:
- icon: null
label:
en_US: doubao-seedream-4-0-250828
ja_JP: doubao-seedream-4-0-250828
pt_BR: doubao-seedream-4-0-250828
zh_Hans: doubao-seedream-4-0-250828
value: doubao-seedream-4-0-250828
- icon: null
label:
en_US: doubao-seedream-4-5-251128
ja_JP: doubao-seedream-4-5-251128
pt_BR: doubao-seedream-4-5-251128
zh_Hans: doubao-seedream-4-5-251128
value: doubao-seedream-4-5-251128
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 提示词(建议不超过500个汉字或1000个英文单词)
ja_JP: 提示词(建议不超过500个汉字或1000个英文单词)
pt_BR: 提示词(建议不超过500个汉字或1000个英文单词)
zh_Hans: 提示词(建议不超过500个汉字或1000个英文单词)
llm_description: ''
max: null
min: null
name: prompt
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: 2048x2048
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 宽高像素(默认值2048x2048,4.5版本不支持1K)
ja_JP: 宽高像素(默认值2048x2048,4.5版本不支持1K)
pt_BR: 宽高像素(默认值2048x2048,4.5版本不支持1K)
zh_Hans: 宽高像素(默认值2048x2048,4.5版本不支持1K)
llm_description: ''
max: null
min: null
name: size
options:
- icon: null
label:
en_US: 1K
ja_JP: 1K
pt_BR: 1K
zh_Hans: 1K
value: 1K
- icon: null
label:
en_US: 2K
ja_JP: 2K
pt_BR: 2K
zh_Hans: 2K
value: 2K
- icon: null
label:
en_US: 4K
ja_JP: 4K
pt_BR: 4K
zh_Hans: 4K
value: 4K
- icon: null
label:
en_US: 2048x2048
ja_JP: 2048x2048
pt_BR: 2048x2048
zh_Hans: 2048x2048
value: 2048x2048
- icon: null
label:
en_US: 2304x1728
ja_JP: 2304x1728
pt_BR: 2304x1728
zh_Hans: 2304x1728
value: 2304x1728
- icon: null
label:
en_US: 1728x2304
ja_JP: 1728x2304
pt_BR: 1728x2304
zh_Hans: 1728x2304
value: 1728x2304
- icon: null
label:
en_US: 2560x1440
ja_JP: 2560x1440
pt_BR: 2560x1440
zh_Hans: 2560x1440
value: 2560x1440
- icon: null
label:
en_US: 1440x2560
ja_JP: 1440x2560
pt_BR: 1440x2560
zh_Hans: 1440x2560
value: 1440x2560
- icon: null
label:
en_US: 2496x1664
ja_JP: 2496x1664
pt_BR: 2496x1664
zh_Hans: 2496x1664
value: 2496x1664
- icon: null
label:
en_US: 1664x2496
ja_JP: 1664x2496
pt_BR: 1664x2496
zh_Hans: 1664x2496
value: 1664x2496
- icon: null
label:
en_US: 3024x1296
ja_JP: 3024x1296
pt_BR: 3024x1296
zh_Hans: 3024x1296
value: 3024x1296
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
ja_JP: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
pt_BR: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
zh_Hans: 自定义像素(取值范围:4.5[2560x1440, 4096x4096],4.0[1280x720, 4096x4096],优先级高于宽高像素)
llm_description: ''
max: null
min: null
name: custom_size
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否关闭组图功能(默认disabled)
ja_JP: 是否关闭组图功能(默认disabled)
pt_BR: 是否关闭组图功能(默认disabled)
zh_Hans: 是否关闭组图功能(默认disabled)
llm_description: ''
max: null
min: null
name: sequential_image_generation
options:
- icon: null
label:
en_US: auto
ja_JP: auto
pt_BR: auto
zh_Hans: auto
value: auto
- icon: null
label:
en_US: disabled
ja_JP: disabled
pt_BR: disabled
zh_Hans: disabled
value: disabled
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
ja_JP: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
pt_BR: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
zh_Hans: 最大生成数量(仅当组图功能为auto时设置,范围[1,15],默认值1)
llm_description: ''
max: null
min: null
name: max_images
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 原始图片(图片格式:jpeg、png、webp、gif)
ja_JP: 原始图片(图片格式:jpeg、png、webp、gif)
pt_BR: 原始图片(图片格式:jpeg、png、webp、gif)
zh_Hans: 原始图片(图片格式:jpeg、png、webp、gif)
llm_description: ''
max: null
min: null
name: images
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: files
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否添加水印(默认值true)
ja_JP: 是否添加水印(默认值true)
pt_BR: 是否添加水印(默认值true)
zh_Hans: 是否添加水印(默认值true)
llm_description: ''
max: null
min: null
name: watermark
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
params:
custom_size: ''
images: ''
max_images: ''
model: ''
prompt: ''
sequential_image_generation: ''
size: ''
watermark: ''
provider_id: 22632cc7-732a-4b68-94e7-5be7e1b48ba9
provider_name: 即梦-文/图生图-4.x版本
provider_type: workflow
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 1000
selected: false
title: 即梦-文/图生图-4.x版本-不垫图
tool_configurations: {}
tool_description: 即梦-文/图生图-4.x版本
tool_label: 即梦-文/图生图-4.x版本
tool_name: seedream_i2i_t2i_tool
tool_node_version: '2'
tool_parameters:
custom_size:
type: mixed
value: null
images:
type: constant
value: null
max_images:
type: constant
value: null
model:
type: constant
value: doubao-seedream-4-5-251128
prompt:
type: mixed
value: '{{#1766574211446.structured_output.optimized_prompt#}}'
sequential_image_generation:
type: constant
value: auto
size:
type: variable
value:
- '1766565906395'
- video_resolution
watermark:
type: constant
value: 'false'
type: tool
height: 162
id: '1767711018753'
parentId: '1766574059102'
position:
x: 1037.6412941034116
y: 276
positionAbsolute:
x: 587.6666301980829
y: 1073.5655251175879
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
code: "\nfunction main({global_style, custom_global_style}) {\n var global_style_result\
\ = \"\";\n if (global_style == \"19世纪油画风格\") {\n global_style_result\
\ = \"19th Century Cinematic Oil Painting Style, Classical Realism, rich\
\ textures, soft volumetric lighting, muted earth tones, heavy brushstrokes,\
\ chiaroscuro lighting\";\n }\n else if (global_style == \"3D皮克斯风格\"\
) {\n global_style_result = \"3D Disney Pixar animation style, high\
\ quality 3D render, C4D, Octane render\";\n }\n else if (global_style\
\ == \"波普艺术风格\") {\n global_style_result = \"Pop art style, Ben-Day\
\ dots shading, thick black outlines, retro American comic book aesthetic,\
\ vibrant contrasting colors, Andy Warhol vibe, 8k.\";\n }\n else\
\ if (global_style == \"吉卜力手绘水彩风格\") {\n global_style_result = \"\
Studio Ghibli style, Hayao Miyazaki aesthetic, fresh and natural, beautiful\
\ watercolor background, lush greenery, cumulus clouds, healing colors,\
\ hand-drawn texture, whimsical atmosphere\";\n }\n else if (global_style\
\ == \"新中式东方奇幻\") {\n global_style_result = \"New Chinese fantasy\
\ illustration, high saturation neon contrasting colors, cel shading, deep\
\ blue night, volumetric fog, minimalist composition, ethereal, 8k resolution.\"\
;\n }\n else if (global_style == \"写实\") {\n global_style_result\
\ = \"Hyper-realistic style, cinematic photography, realistic textures,\
\ 85mm lens, depth of field, realistic skin pores, natural lighting, photorealistic,\
\ movie still, highly detailed, 8k.\";\n }\n return {\n global_style:\
\ custom_global_style || global_style_result\n }\n}\n"
code_language: javascript
desc: ''
outputs:
global_style:
children: null
type: string
selected: false
title: 全局风格映射
type: code
variables:
- value_selector:
- '1765354062480'
- global_style
value_type: string
variable: global_style
- value_selector:
- '1765354062480'
- custom_global_style
value_type: string
variable: custom_global_style
height: 53
id: '1768184532311'
position:
x: -667.2969344196229
y: -734.7970348673688
positionAbsolute:
x: -667.2969344196229
y: -734.7970348673688
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
code: "\nfunction main({all_actors_text1, all_actors_text2}) {\n const\
\ all_actors_text = all_actors_text1 || all_actors_text2;\n const all_actors\
\ = JSON.parse(all_actors_text);\n let actor_list = [];\n if (Array.isArray(all_actors))\
\ {\n actor_list = all_actors;\n } else {\n actor_list\
\ = all_actors.all_actors;\n }\n const actors = actor_list.map(\n\
\ actor => ({\n name: actor.name,\n gender:\
\ actor.gender,\n age: actor.age,\n image_url: actor.image_url,\n\
\ voiceid: actor.voiceid,\n actor_voice_source: actor.actor_voice_source,\n\
\ actor_voice_type: actor.actor_voice_type,\n })\n \
\ );\n const actors_text = JSON.stringify(actors);\n\n return {\n\
\ actors: actors,\n actors_text: actors_text\n }\n}\n"
code_language: javascript
desc: ''
outputs:
actors:
children: null
type: array[object]
actors_text:
children: null
type: string
selected: false
title: 提取角色基本信息
type: code
variables:
- value_selector:
- '1772677692387'
- text
value_type: string
variable: all_actors_text1
- value_selector:
- '1765354062480'
- all_actors_text
value_type: string
variable: all_actors_text2
height: 53
id: '1768803191521'
position:
x: -244.32558025928017
y: -1020.381368936795
positionAbsolute:
x: -244.32558025928017
y: -1020.381368936795
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: empty
id: 9c6e17a5-d2f2-4f19-b29a-040097b94a94
value: ''
varType: string
variable_selector:
- '1765354062480'
- all_actors_text
id: 'true'
logical_operator: and
desc: ''
selected: false
title: 是否需要调用角色生成
type: if-else
height: 125
id: '1768806919571'
position:
x: -803.8769249212731
y: -1360.4570940737062
positionAbsolute:
x: -803.8769249212731
y: -1360.4570940737062
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
audio:
configs:
variable_selector: []
enabled: false
context:
enabled: false
variable_selector: []
desc: ''
model:
completion_params:
json_schema: "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\
,\n \"title\": \"Art Project Schema (v2)\",\n \"description\": \"\
Schema for art project configuration with scenes (v2): no character_anchor_prompt;\
\ scene supports multi-actors via characters[]\",\n \"type\": \"object\"\
,\n \"required\": [\n \"project_info\",\n \"scenes\"\n ],\n\
\ \"properties\": {\n \"project_info\": {\n \"type\": \"object\"\
,\n \"description\": \"Project metadata and global settings\",\n\
\ \"required\": [\n \"title\",\n \"global_style\"\
\n ],\n \"properties\": {\n \"title\": {\n \
\ \"type\": \"string\",\n \"description\": \"Project title\"\
,\n \"minLength\": 1\n },\n \"global_style\"\
: {\n \"type\": \"string\",\n \"description\": \"\
Global artistic style prompt (must be copied verbatim from the provided\
\ Global Style Prompt variable)\",\n \"minLength\": 1\n \
\ }\n },\n \"additionalProperties\": false\n },\n \
\ \"scenes\": {\n \"type\": \"array\",\n \"description\"\
: \"List of scenes in the project\",\n \"minItems\": 1,\n \
\ \"items\": {\n \"type\": \"object\",\n \"description\"\
: \"Individual scene configuration\",\n \"required\": [\n \
\ \"id\",\n \"narration\",\n \"visual_description\"\
,\n \"visual_prompt\",\n \"has_character\",\n \
\ \"characters\"\n ],\n \"properties\": {\n \
\ \"id\": {\n \"type\": \"integer\",\n \"\
description\": \"Unique identifier for the scene\",\n \"\
minimum\": 1\n },\n \"narration\": {\n \
\ \"type\": \"string\",\n \"description\": \"Exact substring\
\ copied verbatim from Courseware Text (no edits); only segmentation\
\ allowed\",\n \"minLength\": 1\n },\n \
\ \"visual_description\": {\n \"type\": \"string\",\n \
\ \"description\": \"Director's note for visual direction (Chinese,\
\ 1-2 sentences, executable on screen)\",\n \"minLength\"\
: 1\n },\n \"visual_prompt\": {\n \"type\"\
: \"string\",\n \"description\": \"Prompt for image/video\
\ generation (recommended English keywords). Must start with project_info.global_style;\
\ if has_character=1 include selected actors' prompt + reference image\
\ URLs\",\n \"minLength\": 1\n },\n \"\
has_character\": {\n \"type\": \"integer\",\n \
\ \"description\": \"Whether on-screen characters appear in this scene\
\ (0=no, 1=yes)\",\n \"enum\": [\n 0,\n \
\ 1\n ]\n },\n \"characters\"\
: {\n \"type\": \"array\",\n \"description\":\
\ \"List of on-screen actor names selected from actors_json. Empty array\
\ when has_character=0\",\n \"items\": {\n \"\
type\": \"string\",\n \"minLength\": 1\n }\n\
\ }\n },\n \"allOf\": [\n {\n \
\ \"if\": {\n \"properties\": {\n \"\
has_character\": {\n \"const\": 0\n \
\ }\n },\n \"required\": [\n \
\ \"has_character\"\n ]\n },\n \
\ \"then\": {\n \"properties\": {\n \"characters\"\
: {\n \"maxItems\": 0\n }\n \
\ }\n },\n \"else\": {\n \"\
properties\": {\n \"characters\": {\n \
\ \"minItems\": 1\n }\n }\n \
\ }\n }\n ],\n \"additionalProperties\": false\n\
\ }\n }\n },\n \"additionalProperties\": false\n}"
response_format: json_schema
mode: chat
name: gpt-5-2025-08-07
provider: aict/ai_hub/ai_hub
prompt_template:
- id: aa3577c9-d6d4-499c-9a12-7101d5c3b50e
role: system
text: "### 角色(Role)\n你是一名资深的 AI 视频导演与提示词工程师。请把给定的【课件文本(Courseware Text)】切分为多个逻辑分镜,并输出严格符合下方\
\ JSON Schema 与全部约束的 JSON。\n\n---\n\n### 固定项目设置(输出中必须写入 project_info)\n\
【Global Style Prompt】(输出中必须原样使用):\n{{#1768184532311.global_style#}}\n\n\
【Actors JSON】(本项目可用角色全集;从中挑选出镜角色的 name ):\n{{#1768803191521.actors_text#}}\n\
\n### 硬规则(角色相关)\nhas_character 的判断只依据“该场景是否需要人物出镜承载信息”,与是否能选到角色无关。\n角色一致性来源:按\
\ name 在 Actors JSON 中匹配(仅使用 name ;不要使用/输出 actor.prompt)。\n不要在 visual_description\
\ / visual_prompt 中描述角色风格,也不要写任何 url。\n\n### 输出要求(严格:必须符合 Schema)\n只返回合法\
\ JSON(不要 markdown、不要代码块、不要注释)。\n顶层 JSON 必须是以下结构:\n{\n \"project_info\"\
: {\n \"title\": \"...\",\n \"global_style\": \"...\"\n },\n \"\
scenes\": [...]\n}\n强制规则:\nproject_info.global_style 必须与【Global Style\
\ Prompt】完全一致(逐字相同)。\n每个 scene 对象只能包含以下键(不得多、不得少):\n{ \"id\", \"narration\"\
, \"visual_description\", \"visual_prompt\", \"has_character\", \"characters\"\
\ }\nhas_character 必须存在,且为数字 0 或 1(禁止 true/false,禁止字符串)。\ncharacters 必须存在:\n\
当 has_character=1:characters 为对象数组;每个对象只能有 name\nname 必须能在 Actors JSON\
\ 的 actors[].name 中找到完全一致的项;\n允许多角色同框。\n当 has_character=0:characters 必须为\
\ []。\n任何位置都不允许出现额外字段(additionalProperties=false)。\n\n### narration 逐字拷贝硬规则(最高优先级)\n\
narration 必须是【课件文本】中的原文片段,逐字逐符号完全一致。\n允许的唯一操作:切分(segmentation)\n不允许:\n\
改写/同义替换/缩写/扩写/总结/解释/补充\n纠错、润色、调整语序\n改变任何标点(全角/半角均不行)\n改变大小写、数字格式、单位、日期\n\
新增或删除任何字符(包括空格、换行、制表符)\n合并非相邻片段(只能截取连续原文子串)\n自检要求:\n每条 narration 必须能在课件文本中找到完全相同的连续子串。\n\
narration 输出=复制粘贴原文。\n\n### 长度红线与节奏拆分(关键更新:防超时 & 防零碎)\n视频生成模型存在时长物理极限,同时需要保证视频节奏不至于稀碎。\n\
1. **长度目标与红线**:\n - 中文:最佳区间 **15–35 个中文字符**。**绝对红线:≤ 45 个字符**(含标点,超过\
\ 45 字视频生成将直接崩溃!)。\n - 英文:最佳区间 **15–25 个单词**。**绝对红线:≤ 35 个单词**。\n \
\ - 极短防碎:除非原文本身就是极短的独立句,否则严禁切出 <10 个字符的零碎片段。\n2. **冲突裁决优先级**:\n - 第一优先:逐字拷贝(永不改字)。\n\
\ - 第二优先:字数绝对红线(超过 45 字必须强行切分)。\n - 第三优先:语义完整与句子连贯(在不超过 45 字的前提下,尽量保持一整句话不拆)。\n\
\ - 第四优先:均衡节奏(面临超长需切分时,避免头重脚轻,如切成 40字 + 5字)。\n\n### 逗号切分规则(关键更新:均衡拆分)\n\
默认优先在句号/分号/问号/感叹号处切分。\n**只有当一句话逼近或超过 45 个字符的红线时,才必须使用逗号切分,且需遵循以下“均衡原则”:**\n\
1. **寻找居中停顿**:不要逢逗号就切,而是寻找长句中逻辑最居中、停顿最明显的逗号,将长句拆分为长度相对均衡的两段(例如 25字 + 22字)。\n\
2. **放宽自洽要求**:为了满足物理限制,**允许拆分后半句没有主语**。只要相邻分镜的 visual_description 保持画面主体一致、动作连贯即可。\n\
\n\U0001F4A1 **【超长句切分标准示例】**\n原文:“但最后,这些情绪好像都融化了,变成了一种对自然、对生命更深沉的凝视,仿佛在向全人类诉说着无声的悲悯与宽容。”(54字,超过\
\ 45 字红线,必须切分!)\n❌ 错误切分1(超长崩溃):\"但最后,这些情绪好像都融化了,变成了一种对自然、对生命更深沉的凝视,仿佛在向全人类诉说着无声的悲悯与宽容。\"\
(54字,直接超时崩溃)\n❌ 错误切分2(过度零碎):\"但最后,\" / \"这些情绪好像都融化了,\" / \"变成了一种对自然、\"\
\ / \"对生命更深沉的凝视,\"...(切得太碎,节奏断裂)\n✅ **正确均衡切分**:\n- Scene 1: \"但最后,这些情绪好像都融化了,变成了一种对自然、对生命更深沉的凝视,\"\
\ (35字,保留了大部分语义,未超红线)\n- Scene 2: \"仿佛在向全人类诉说着无声的悲悯与宽容。\" (19字,虽无主语,但长度合适,画面连贯即可)\n\
\n### 话语标记合并规则\n若片段以话语标记开头或本身仅包含话语标记,必须与其后最近的“实质信息片段”合并,不得单独作为一个 scene\
\ 的 narration。\n典型话语标记示例:Of course, Well, So, Anyway, 其实、所以、那么、总之、不过、你看等。\n\
**例外**:如果合并后总长度超过 45 字红线,则必须在话语标记之后的长句内部,寻找合适的逗号进行“均衡切分”。\n\n### 切分策略(只能用原文边界切)\n\
按优先级选择切分点,并在每次切分后做“自洽校验”:\n1. 句号/分号/问号/感叹号/换行(首选;尽量一景一整句)\n2. 冒号(用于“定义/解释:后文”结构时,优先不拆;若必须拆,优先把“冒号后解释段”整体成景)\n\
3. 破折号边界(优先在破折号两侧形成自洽段;避免切到中间残片)\n4. 括号/引号规则:不在同一对中文括号/引号内部切分;若必须切,先在括号外侧边界找。\n\
5. 逗号/顿号(仅在面临超长风险时,按“均衡拆分”原则切分)。\n\n### 英文切分策略\n优先按句号/分号/问号/感叹号切分;尽量保持完整句。\n\
若单句过长(>35词):优先在逗号、连词(and/but/so/because/which/that)前后切;仍需保证每段能独立读通,或通过画面保持连贯。必要时按空格边界切为短语,但禁止只切出孤立介词短语。\n\
\n### 自洽校验与回退\n切分得到的每条 narration 必须通过以下检查;不通过则与相邻片段合并(只要合并后不超过 45 字红线):\n\
1. 禁止“悬空连接词”开头(如“但是/因此/而且”等单独成镜)。\n2. 禁止“语法未闭合”结尾(如落在“的/地/得/把/被/在”等后面)。\n\
3. 列表与分步:出现“第一/其次”时,优先“列表引导句+至少第一项”同景。\n4. 话语标记残片回退:若 narration 仅为 1–3\
\ 个单词的话语标记,必须合并。\n\n### 生成顺序(关键)\n对每个场景严格按以下顺序执行:\n1. 静默提取并锁定 Era Anchor\
\ 与 Location Anchor。\n2. 判定 has_character(0/1)。\n3. 写 narration(逐字拷贝;**严守\
\ 45 字红线,优先均衡拆分**)。\n4. 写 visual_description(中文 1–2 句,可拍可执行。**注意:长句被切断时,相邻分镜的画面必须保持主体一致与微小推进,确保视觉连贯**)。\n\
5. 写 visual_prompt(英文关键词逗号分隔;必须以 Global Style Prompt 开头)。\n6. 若 has_character=1:填写\
\ characters。\n\n### has_character 判定规则\nhas_character=1:画面需要出现人物承载信息(讲解、演示、指向、情绪/视角表达等)。\n\
has_character=0:只需环境/物体/文字/图表/抽象演示,不出现人物。\n主角识别与继承:课件文本出现明确人物,将第一个被持续指代的人物视为主角。主角一旦出现,后续若用代词或讲者视角叙述,默认主角继续出镜。\n\
两可时用“是否需要人物完成动作/指向/演示来承载信息”裁决。\n\n### 时代/地域锁定(Period & Location Lock,硬规则)\n\
必须从【课件文本】中抽取并锁定“时代锚点(Era Anchor)”与“地点锚点(Location Anchor)”。\n一旦课件明确给出(如“19世纪法国”),除非后文明确切换,否则所有\
\ scene 的 visual_description 与 visual_prompt 都必须持续符合该时代/地点。\n每条 scene\
\ 的 visual_description 必须显式体现时代一致性(服饰/建筑/交通/室内陈设等至少 1–2 个可执行细节)。\n每条 scene\
\ 的 visual_prompt 必须包含 Era Anchor + Location Anchor 的英文关键词(放在 Global Style\
\ Prompt 之后即可)。\n\n### 反时代错误(Anachronism)硬禁止清单(硬规则)\n在历史时期锁定期间,visual_description\
\ / visual_prompt 中禁止出现或暗示以下元素:\n现代交通与城市:car, modern bus, subway, airplane,\
\ skyscraper\n现代电子与屏幕:smartphone, computer, laptop, TV, projector screen,\
\ LED, neon sign\n现代服饰与材质:hoodie, sneakers, plastic products\n现代室内与道具:whiteboard\
\ marker, modern classroom, PowerPoint\n\n### 画面规则(Visual Rules)\nvisual_description:中文\
\ 1–2 句;镜头、场景、动作、构图明确;与全篇叙事连贯。\nvisual_prompt:英文关键词逗号分隔;避免长段落;每条必须以 Global\
\ Style Prompt 原样开头。\n角色相关:visual_prompt 与 visual_description 中不要出现角色\
\ url;has_character=1 时可用通用人物词描述动作与构图。\n\n### 场景输出模板(每条 scene 必须齐全 6 键)\n\
{\n \"id\": 1,\n \"narration\": \"...\",\n \"visual_description\":\
\ \"(中文1–2句;结合全篇故事与当前旁白,可执行。若旁白是被切断的半句,画面需与前一镜保持连贯)\",\n \"visual_prompt\"\
: \"{{#1768184532311.global_style#}}, ...\",\n \"has_character\": 0,\n\
\ \"characters\": []\n}\n\n### 生成前静默自检(Silent Self-check)\n1. 顶层仅 project_info\
\ 与 scenes。每条 scene 恰好 6 个键。\n2. narration 为课件原文连续子串,逐字逐符号一致;不拼接不相邻片段。\n\
3. **【生死红线检查】**:是否有任何一条 narration 超过了 45 个中文字符?如果有,**必须强制回退**,寻找居中的逗号进行“均衡拆分”!\n\
4. **【防零碎检查】**:是否切出了大量 5-10 字的极短分镜?如果是,在不超过 45 字红线的前提下,将它们合并。\n5. 年代一致性自检:是否包含时代物证细节?是否混入了现代违禁物品(手机/LED等)?若出现,必须重写画面描述。"
- id: a861d1c5-31ba-4aea-9615-37644be31741
role: user
text: '## 输入Courseware Text 格式
剧本格式的文本片段,包含以下结构化要素:
1. 【剧本】
2. 【年代设定】
3. 【角色设定】
4. 【正文】
只有正文需要作为讲稿进行分镜划分,年代设定、角色设定作为元信息使用,不要出现在 narration 中
## Courseware Text
{{#1765354062480.content#}}'
selected: false
structured_output:
schema:
$schema: http://json-schema.org/draft-07/schema#
additionalProperties: false
description: 'Schema for art project configuration with scenes (v2): no
character_anchor_prompt; scene supports multi-actors via characters[]'
properties:
project_info:
additionalProperties: false
description: Project metadata and global settings
properties:
global_style:
description: Global artistic style prompt (must be copied verbatim
from the provided Global Style Prompt variable)
minLength: 1
type: string
title:
description: Project title
minLength: 1
type: string
required:
- title
- global_style
type: object
scenes:
description: List of scenes in the project
items:
additionalProperties: false
allOf:
- else:
properties:
characters:
minItems: 1
if:
properties:
has_character:
const: 0
required:
- has_character
then:
properties:
characters:
maxItems: 0
description: Individual scene configuration
properties:
characters:
description: List of on-screen actor names selected from actors_json.
Empty array when has_character=0
items:
minLength: 1
type: string
type: array
has_character:
description: Whether on-screen characters appear in this scene
(0=no, 1=yes)
enum:
- 0
- 1
type: integer
id:
description: Unique identifier for the scene
minimum: 1
type: integer
narration:
description: Exact substring copied verbatim from Courseware
Text (no edits); only segmentation allowed
minLength: 1
type: string
visual_description:
description: Director's note for visual direction (Chinese,
1-2 sentences, executable on screen)
minLength: 1
type: string
visual_prompt:
description: Prompt for image/video generation (recommended
English keywords). Must start with project_info.global_style;
if has_character=1 include selected actors' prompt + reference
image URLs
minLength: 1
type: string
required:
- id
- narration
- visual_description
- visual_prompt
- has_character
- characters
type: object
minItems: 1
type: array
required:
- project_info
- scenes
title: Art Project Schema (v2)
type: object
structured_output_enabled: true
title: 旁白-统一角色版本
type: llm
variables: []
video:
configs:
variable_selector: []
enabled: false
vision:
enabled: false
height: 121
id: '1768894989678'
position:
x: -80.1036657730136
y: -185.01294724995353
positionAbsolute:
x: -80.1036657730136
y: -185.01294724995353
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766574059102'
output_schema: null
outputs:
- type: array[file]
value_selector:
- '1765786558047'
- output
value_type: array[file]
variable: download_files
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 文件地址,用英文逗号隔开
ja_JP: 文件地址,用英文逗号隔开
pt_BR: 文件地址,用英文逗号隔开
zh_Hans: 文件地址,用英文逗号隔开
llm_description: ''
max: null
min: null
name: file_urls
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
params:
file_urls: ''
provider_id: cbfb0a5d-db67-4a7f-ac2c-414c16027f00
provider_name: AI课件 - 批量下载文件
provider_type: workflow
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 1000
selected: false
title: AI课件 - 批量下载文件
tool_configurations: {}
tool_description: AI课件 - 批量下载文件
tool_label: AI课件 - 批量下载文件
tool_name: aic_batch_download_file
tool_node_version: '2'
tool_parameters:
file_urls:
type: mixed
value: '{{#1766574094213.concatenatedString#}}'
type: tool
height: 122
id: '1768915366540'
parentId: '1766574059102'
position:
x: 843.7849975311423
y: 99.86043609268609
positionAbsolute:
x: 393.81033362581354
y: 897.425961210274
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
code: "\nfunction main({scenes, project_info,video_aspect, translate_language,\
\ content,global_style}) {\n const new_project_info = {\n ...project_info,\n\
\ video_aspect: video_aspect,\n translate_language: translate_language,\n\
\ content: content,\n global_style: global_style,\n };\n\
\ const storyboard = scenes.map(\n item => ({\n id\
\ : item.id,\n lines: item.narration,\n visual_description:\
\ item.visual_description,\n motion_description: item.notes,\n\
\ image_prompt: item.optimized_prompt,\n actor_urls:\
\ item.actor_urls,\n actor_names: item.characters,\n \
\ image_url: item.image_url,\n motion_prompt: item.motion_prompt,\n\
\ need_lip_sync: item.need_lip_sync,\n voice_id: item.voice_id,\n\
\ voice_source: item.voice_source,\n tts_url: item.audioUrl,\n\
\ tts_duration: item.duration,\n video_url: item.videoUrl,\n\
\ video_duration: item.ceilDuration,\n\n has_character:\
\ item.has_character,\n include_character: item.include_character,\n\
\ })\n );\n const obj = {\n project_info: new_project_info,\n\
\ storyboard: storyboard,\n };\n const jsonString = JSON.stringify(obj);\n\
\ return {\n storyboard: storyboard,\n jsonString: jsonString,\n\
\ project_info: new_project_info,\n }\n}\n"
code_language: javascript
desc: ''
outputs:
jsonString:
children: null
type: string
project_info:
children: null
type: object
storyboard:
children: null
type: array[object]
selected: false
title: 统一输出字段
type: code
variables:
- value_selector:
- '1766632760253'
- output
value_type: array[object]
variable: scenes
- value_selector:
- '1766565906395'
- projectInfo
value_type: object
variable: project_info
- value_selector:
- '1765354062480'
- video_aspect
value_type: string
variable: video_aspect
- value_selector:
- '1765354062480'
- translate_language
value_type: string
variable: translate_language
- value_selector:
- '1765354062480'
- content
value_type: string
variable: content
- value_selector:
- '1768184532311'
- global_style
value_type: string
variable: global_style
height: 53
id: '1768987193454'
position:
x: -629.1540626202004
y: 3617.1554607865783
positionAbsolute:
x: -629.1540626202004
y: 3617.1554607865783
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
audio:
configs:
variable_selector: []
enabled: false
context:
enabled: false
variable_selector: []
desc: ''
model:
completion_params: {}
mode: chat
name: gpt-5.1-2025-11-13
provider: aict/ai_hub/ai_hub
prompt_template:
- id: af5ff621-35f5-4517-982d-35c6ab06fb67
role: system
text: '你是一位专业的影视脚本分镜师和格式化专家。你的任务是将用户提供的【原始讲稿】转化为严格的【分镜脚本格式】。
Rules & Logic
分段原则 ([SCENE X]):
每一个独立的“动作+台词”组合应作为一个独立的 [SCENE]。
如果一段台词中间插入了动作描述(括号内容),必须将该动作前后的台词拆分为两个不同的 [SCENE] 块。
每一个编号 [SCENE X] 代表一个独立的镜头或节拍。
内容提取 (Extraction):
META:从文首提取时间、地点、环境描写。如果后续镜头场景未变,可简写或留空。
VISUAL:提取原始文本中圆括号 () 内的动作、神态、调度描写。不要把这些内容留在台词里。
SPEAKER:提取说话的角色名。
MODE:
如果角色是“旁白”或“画外音”,填 VO。
如果角色在画面中对话或独白,填 DIALOGUE。
如果角色直视镜头说话(如采访/主播),填 ONCAM。
LINE:提取纯净的口语台词。严禁包含任何括号或动作描写。
Format Constraint: 请严格按照以下模板输出,不要添加额外的寒暄或总结:
[SCENE #]
META: <时间/地点/背景>
VISUAL: <提取的动作描述>
SPEAKER: <角色名>
MODE: <ONCAM / VO / DIALOGUE>
LINE: <纯净台词>
Workflow Example
Input:
(他叹了口气)
张三:今天天气真不好。(看向窗外)甚至有点想下雨。
Output:
[SCENE 1]
META: ...
VISUAL: 他叹了口气
SPEAKER: 张三
MODE: DIALOGUE
LINE: 今天天气真不好。
[SCENE 2]
META: ...
VISUAL: 看向窗外
SPEAKER: 张三
MODE: DIALOGUE
LINE: 甚至有点想下雨。
Task
请读取下方的【原始讲稿】,并按上述规则转化为指定格式:
'
- id: 1241753d-0c1f-470c-b26c-fd155a722b02
role: user
text: '【讲稿】:
{{#1776397744783.text#}}'
selected: false
title: 讲稿格式转换
type: llm
variables: []
video:
configs:
variable_selector: []
enabled: false
vision:
enabled: false
height: 121
id: '1768990832178'
position:
x: -87.82401233670322
y: -428.647731270818
positionAbsolute:
x: -87.82401233670322
y: -428.647731270818
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
desc: ''
is_team_authorization: true
output_schema: null
outputs:
- type: string
value_selector:
- '1767837407358'
- draft_url
value_type: string
variable: draft_url
- type: string
value_selector:
- '1767837407361'
- script_url
value_type: string
variable: script_url
- type: string
value_selector:
- '1769066911304'
- video_url
value_type: string
variable: export_video_url
- type: array[object]
value_selector:
- '1769066210458'
- storyboard
value_type: object
variable: storyboard
- type: object
value_selector:
- '1769066210458'
- project_info
value_type: object
variable: project_info
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 分镜描述脚本
ja_JP: 分镜描述脚本
pt_BR: 分镜描述脚本
zh_Hans: 分镜描述脚本
llm_description: ''
max: null
min: null
name: script
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: video_width
ja_JP: video_width
pt_BR: video_width
zh_Hans: video_width
llm_description: ''
max: null
min: null
name: video_width
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: video_height
ja_JP: video_height
pt_BR: video_height
zh_Hans: video_height
llm_description: ''
max: null
min: null
name: video_height
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
params:
script: ''
video_height: ''
video_width: ''
provider_id: db719041-7cc2-40c1-9278-38810f5d2c49
provider_name: 构建剪映草稿
provider_type: workflow
selected: false
title: 构建剪映草稿
tool_configurations: {}
tool_description: 按照约定的数据结构自动生成剪映草稿
tool_label: 构建剪映草稿
tool_name: aic_jianying_draft
tool_node_version: '2'
tool_parameters:
ignore_subtitle:
type: variable
value:
- '1765354062480'
- ignore_subtitle
script:
type: mixed
value: '{{#1768987193454.jsonString#}}'
translate_language:
type: mixed
value: '{{#1765354062480.translate_language#}}'
video_aspect:
type: variable
value:
- '1765354062480'
- video_aspect
video_height:
type: variable
value:
- '1766565906395'
- video_height
video_width:
type: variable
value:
- '1766565906395'
- video_width
type: tool
height: 93
id: '1769069698077'
position:
x: -208.92701615362444
y: 3617.1554607865783
positionAbsolute:
x: -208.92701615362444
y: 3617.1554607865783
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766579168310'
output_schema: null
outputs:
- type: any
value_selector:
- '1753035060851'
- error
variable: error_message
- type: any
value_selector:
- '1753289226679'
- url
variable: url
- type: any
value_selector:
- '1753289226679'
- duration
value_type: string
variable: duration
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 文本(长度不超过300)
ja_JP: 文本(长度不超过300)
pt_BR: 文本(长度不超过300)
zh_Hans: 文本(长度不超过300)
llm_description: ''
max: null
min: null
name: text
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 发音人(音色列表:https://w.101.com/FZF7Bv,取1.0版本列表的voice_type字段)
ja_JP: 发音人(音色列表:https://w.101.com/FZF7Bv,取1.0版本列表的voice_type字段)
pt_BR: 发音人(音色列表:https://w.101.com/FZF7Bv,取1.0版本列表的voice_type字段)
zh_Hans: 发音人(音色列表:https://w.101.com/FZF7Bv,取1.0版本列表的voice_type字段)
llm_description: ''
max: null
min: null
name: speaker
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: mp3
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 音频格式
ja_JP: 音频格式
pt_BR: 音频格式
zh_Hans: 音频格式
llm_description: ''
max: null
min: null
name: audio_params_format
options:
- icon: null
label:
en_US: mp3
ja_JP: mp3
pt_BR: mp3
zh_Hans: mp3
value: mp3
- icon: null
label:
en_US: ogg_opus
ja_JP: ogg_opus
pt_BR: ogg_opus
zh_Hans: ogg_opus
value: ogg_opus
- icon: null
label:
en_US: pcm
ja_JP: pcm
pt_BR: pcm
zh_Hans: pcm
value: pcm
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
ja_JP: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
pt_BR: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
zh_Hans: 语速 取值范围[-50,100](100代表2.0倍速,-50代表0.5倍数)
llm_description: ''
max: null
min: null
name: audio_params_speech_rate
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 自动识别语种(默认为false)
ja_JP: 自动识别语种(默认为false)
pt_BR: 自动识别语种(默认为false)
zh_Hans: 自动识别语种(默认为false)
llm_description: ''
max: null
min: null
name: enable_language_detector
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 音色情感
ja_JP: 音色情感
pt_BR: 音色情感
zh_Hans: 音色情感
llm_description: ''
max: null
min: null
name: audio_params_emotion
options:
- icon: null
label:
en_US: 开心
ja_JP: 开心
pt_BR: 开心
zh_Hans: 开心
value: 开心
- icon: null
label:
en_US: 悲伤
ja_JP: 悲伤
pt_BR: 悲伤
zh_Hans: 悲伤
value: 悲伤
- icon: null
label:
en_US: 生气
ja_JP: 生气
pt_BR: 生气
zh_Hans: 生气
value: 生气
- icon: null
label:
en_US: 惊讶
ja_JP: 惊讶
pt_BR: 惊讶
zh_Hans: 惊讶
value: 惊讶
- icon: null
label:
en_US: 恐惧
ja_JP: 恐惧
pt_BR: 恐惧
zh_Hans: 恐惧
value: 恐惧
- icon: null
label:
en_US: 厌恶
ja_JP: 厌恶
pt_BR: 厌恶
zh_Hans: 厌恶
value: 厌恶
- icon: null
label:
en_US: 激动
ja_JP: 激动
pt_BR: 激动
zh_Hans: 激动
value: 激动
- icon: null
label:
en_US: 冷漠
ja_JP: 冷漠
pt_BR: 冷漠
zh_Hans: 冷漠
value: 冷漠
- icon: null
label:
en_US: 中性
ja_JP: 中性
pt_BR: 中性
zh_Hans: 中性
value: 中性
- icon: null
label:
en_US: 沮丧
ja_JP: 沮丧
pt_BR: 沮丧
zh_Hans: 沮丧
value: 沮丧
- icon: null
label:
en_US: 愉悦
ja_JP: 愉悦
pt_BR: 愉悦
zh_Hans: 愉悦
value: 愉悦
- icon: null
label:
en_US: 愤怒
ja_JP: 愤怒
pt_BR: 愤怒
zh_Hans: 愤怒
value: 愤怒
- icon: null
label:
en_US: 兴奋
ja_JP: 兴奋
pt_BR: 兴奋
zh_Hans: 兴奋
value: 兴奋
- icon: null
label:
en_US: 对话/闲聊
ja_JP: 对话/闲聊
pt_BR: 对话/闲聊
zh_Hans: 对话/闲聊
value: 对话/闲聊
- icon: null
label:
en_US: 深情
ja_JP: 深情
pt_BR: 深情
zh_Hans: 深情
value: 深情
- icon: null
label:
en_US: 权威
ja_JP: 权威
pt_BR: 权威
zh_Hans: 权威
value: 权威
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 情感程度(取值范围[1-5],默认4)
ja_JP: 情感程度(取值范围[1-5],默认4)
pt_BR: 情感程度(取值范围[1-5],默认4)
zh_Hans: 情感程度(取值范围[1-5],默认4)
llm_description: ''
max: null
min: null
name: audio_params_emotion_scale
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 静音阈值
ja_JP: 静音阈值
pt_BR: 静音阈值
zh_Hans: 静音阈值
llm_description: ''
max: null
min: null
name: additions_mute_cut_threshold
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 需要保留的静音长度(需要配置静音阈值)
ja_JP: 需要保留的静音长度(需要配置静音阈值)
pt_BR: 需要保留的静音长度(需要配置静音阈值)
zh_Hans: 需要保留的静音长度(需要配置静音阈值)
llm_description: ''
max: null
min: null
name: additions_mute_cut_remain_ms
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否开启markdown解析过滤
ja_JP: 是否开启markdown解析过滤
pt_BR: 是否开启markdown解析过滤
zh_Hans: 是否开启markdown解析过滤
llm_description: ''
max: null
min: null
name: disable_markdown_filter
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否可以播报latex公式(需开启markdown解析过滤)
ja_JP: 是否可以播报latex公式(需开启markdown解析过滤)
pt_BR: 是否可以播报latex公式(需开启markdown解析过滤)
zh_Hans: 是否可以播报latex公式(需开启markdown解析过滤)
llm_description: ''
max: null
min: null
name: additions_enable_latex_tn
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否过滤括号内的部分
ja_JP: 是否过滤括号内的部分
pt_BR: 是否过滤括号内的部分
zh_Hans: 是否过滤括号内的部分
llm_description: ''
max: null
min: null
name: length_to_filter_parenthesis
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
params:
additions_enable_latex_tn: ''
additions_mute_cut_remain_ms: ''
additions_mute_cut_threshold: ''
audio_params_emotion: ''
audio_params_emotion_scale: ''
audio_params_format: ''
audio_params_speech_rate: ''
disable_markdown_filter: ''
enable_language_detector: ''
length_to_filter_parenthesis: ''
speaker: ''
text: ''
provider_id: 2405d153-9a5e-4285-8732-ac68bb7e902a
provider_name: 豆包TTS语音合成1.0
provider_type: workflow
selected: false
title: 豆包TTS语音合成1.0
tool_configurations: {}
tool_description: 豆包TTS语音合成1.0
tool_label: 豆包TTS语音合成1.0
tool_name: doubao_seed_tts_1_0
tool_node_version: '2'
tool_parameters:
additions_enable_latex_tn:
type: constant
value: 'false'
additions_mute_cut_remain_ms:
type: constant
value: null
additions_mute_cut_threshold:
type: constant
value: null
audio_params_emotion:
type: constant
value: null
audio_params_emotion_scale:
type: constant
value: null
audio_params_format:
type: constant
value: mp3
audio_params_speech_rate:
type: constant
value: null
disable_markdown_filter:
type: constant
value: 'false'
enable_language_detector:
type: constant
value: 'false'
length_to_filter_parenthesis:
type: constant
value: 'false'
speaker:
type: mixed
value: '{{#1766579221158.actor_voice_type#}}'
text:
type: mixed
value: '{{#1766579221158.result#}}'
type: tool
height: 93
id: '1769510509007'
parentId: '1766579168310'
position:
x: 1177.3437726577554
y: 233.12308963170312
positionAbsolute:
x: 122.02707061261208
y: 1673.888462238547
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 8fcaee35-0313-4e21-b6cc-b9c15edb6ab1
value: 独白
varType: string
variable_selector:
- '1765354062480'
- scene_mode
id: 'true'
logical_operator: and
desc: ''
isInIteration: true
isInLoop: false
iteration_id: '1766579168310'
selected: false
title: 条件分支 7
type: if-else
height: 125
id: '1769519278388'
parentId: '1766579168310'
position:
x: 288.65674915335455
y: 190.0928756101182
positionAbsolute:
x: -766.6599528917887
y: 1630.858248216962
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
- data:
desc: ''
is_team_authorization: true
output_schema: null
outputs:
- type: array[object]
value_selector:
- '1769687883065'
- output
value_type: array[object]
variable: all_actors
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 剧本片段/描述性文案
ja_JP: 剧本片段/描述性文案
pt_BR: 剧本片段/描述性文案
zh_Hans: 剧本片段/描述性文案
llm_description: ''
max: null
min: null
name: content
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 选择风格/自定义描述
ja_JP: 选择风格/自定义描述
pt_BR: 选择风格/自定义描述
zh_Hans: 选择风格/自定义描述
llm_description: ''
max: null
min: null
name: artistic_style
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 角色形象图(上传角色正面图,并标注用途【直接使用】/【参考人物特征】)
ja_JP: 角色形象图(上传角色正面图,并标注用途【直接使用】/【参考人物特征】)
pt_BR: 角色形象图(上传角色正面图,并标注用途【直接使用】/【参考人物特征】)
zh_Hans: 角色形象图(上传角色正面图,并标注用途【直接使用】/【参考人物特征】)
llm_description: ''
max: null
min: null
name: images
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: files
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 角色列表2
ja_JP: 角色列表2
pt_BR: 角色列表2
zh_Hans: 角色列表2
llm_description: ''
max: null
min: null
name: images2
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: files
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 角色参考图说明(第N张:姓名-直接使用/参考人物特征;)
ja_JP: 角色参考图说明(第N张:姓名-直接使用/参考人物特征;)
pt_BR: 角色参考图说明(第N张:姓名-直接使用/参考人物特征;)
zh_Hans: 角色参考图说明(第N张:姓名-直接使用/参考人物特征;)
llm_description: ''
max: null
min: null
name: image_discription
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 角色列表
ja_JP: 角色列表
pt_BR: 角色列表
zh_Hans: 角色列表
llm_description: ''
max: null
min: null
name: all_actors
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: 是
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否入库
ja_JP: 是否入库
pt_BR: 是否入库
zh_Hans: 是否入库
llm_description: ''
max: null
min: null
name: save_to_db
options:
- icon: null
label:
en_US: 是
ja_JP: 是
pt_BR: 是
zh_Hans: 是
value: 是
- icon: null
label:
en_US: 否
ja_JP: 否
pt_BR: 否
zh_Hans: 否
value: 否
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
params:
all_actors: ''
artistic_style: ''
content: ''
image_discription: ''
images: ''
images2: ''
save_to_db: ''
provider_id: 93c73102-c21f-4f33-84fa-98932da1d480
provider_name: AI课件 - AIGC - 角色生成V2
provider_type: workflow
selected: false
title: AI课件 - AIGC - 角色生成V2
tool_configurations: {}
tool_description: AI课件 - 角色生成
tool_label: AI课件 - AIGC - 角色生成V2
tool_name: aic_aigc_gen_actor_v2
tool_node_version: '2'
tool_parameters:
all_actors:
type: mixed
value: null
artistic_style:
type: mixed
value: '{{#1765354062480.global_style#}}'
content:
type: mixed
value: '{{#1765354062480.content#}}'
image_discription:
type: mixed
value: '{{#1765354062480.characterAncher#}}'
images:
type: variable
value:
- '1765354062480'
- character_ref_image
images2:
type: constant
value: null
save_to_db:
type: constant
value: 是
type: tool
height: 93
id: '1772677692387'
position:
x: -468.8664809328596
y: -1338.5594862198675
positionAbsolute:
x: -468.8664809328596
y: -1338.5594862198675
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
audio:
configs:
variable_selector: []
enabled: false
context:
enabled: false
variable_selector: []
desc: ''
document:
configs:
variable_selector: []
enabled: false
model:
completion_params:
json_schema: "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\
,\n \"title\": \"Art Project Schema (v2)\",\n \"description\": \"\
Schema for art project configuration with scenes (v2): no character_anchor_prompt;\
\ scene supports multi-actors via characters[]\",\n \"type\": \"object\"\
,\n \"required\": [\n \"project_info\",\n \"scenes\"\n ],\n\
\ \"properties\": {\n \"project_info\": {\n \"type\": \"object\"\
,\n \"description\": \"Project metadata and global settings\",\n\
\ \"required\": [\n \"title\",\n \"global_style\"\
\n ],\n \"properties\": {\n \"title\": {\n \
\ \"type\": \"string\",\n \"description\": \"Project title\"\
,\n \"minLength\": 1\n },\n \"global_style\"\
: {\n \"type\": \"string\",\n \"description\": \"\
Global artistic style prompt (must be copied verbatim from the provided\
\ Global Style Prompt variable)\",\n \"minLength\": 1\n \
\ }\n },\n \"additionalProperties\": false\n },\n \
\ \"scenes\": {\n \"type\": \"array\",\n \"description\"\
: \"List of scenes in the project\",\n \"minItems\": 1,\n \
\ \"items\": {\n \"type\": \"object\",\n \"description\"\
: \"Individual scene configuration\",\n \"required\": [\n \
\ \"id\",\n \"narration\",\n \"visual_description\"\
,\n \"visual_prompt\",\n \"has_character\",\n \
\ \"characters\"\n ],\n \"properties\": {\n \
\ \"id\": {\n \"type\": \"integer\",\n \"\
description\": \"Unique identifier for the scene\",\n \"\
minimum\": 1\n },\n \"narration\": {\n \
\ \"type\": \"string\",\n \"description\": \"Exact substring\
\ copied verbatim from Courseware Text (no edits); only segmentation\
\ allowed\",\n \"minLength\": 1\n },\n \
\ \"visual_description\": {\n \"type\": \"string\",\n \
\ \"description\": \"Director's note for visual direction (Chinese,\
\ 1-2 sentences, executable on screen)\",\n \"minLength\"\
: 1\n },\n \"visual_prompt\": {\n \"type\"\
: \"string\",\n \"description\": \"Prompt for image/video\
\ generation (recommended English keywords). Must start with project_info.global_style;\
\ if has_character=1 include selected actors' prompt + reference image\
\ URLs\",\n \"minLength\": 1\n },\n \"\
has_character\": {\n \"type\": \"integer\",\n \
\ \"description\": \"Whether on-screen characters appear in this scene\
\ (0=no, 1=yes)\",\n \"enum\": [\n 0,\n \
\ 1\n ]\n },\n \"characters\"\
: {\n \"type\": \"array\",\n \"description\":\
\ \"List of on-screen actor names selected from actors_json. Empty array\
\ when has_character=0\",\n \"items\": {\n \"\
type\": \"string\",\n \"minLength\": 1\n }\n\
\ }\n },\n \"allOf\": [\n {\n \
\ \"if\": {\n \"properties\": {\n \"\
has_character\": {\n \"const\": 0\n \
\ }\n },\n \"required\": [\n \
\ \"has_character\"\n ]\n },\n \
\ \"then\": {\n \"properties\": {\n \"characters\"\
: {\n \"maxItems\": 0\n }\n \
\ }\n },\n \"else\": {\n \"\
properties\": {\n \"characters\": {\n \
\ \"minItems\": 1\n }\n }\n \
\ }\n }\n ],\n \"additionalProperties\": false\n\
\ }\n }\n },\n \"additionalProperties\": false\n}"
response_format: json_schema
mode: chat
name: gemini-2.5-pro
provider: aict/ai_hub/ai_hub
prompt_template:
- id: 03ed7e43-45b6-4f30-9d0d-9d30ea1c697e
role: system
text: "### 角色(Role)\n你是一名资深的 AI 视频导演与提示词工程师。你的任务是接收一份【背景故事】和一段【带时间戳的台词】,将台词切分为多个逻辑分镜。每个分镜的时长必须严格符合约束。最后,输出严格符合下方\
\ JSON Schema 与全部约束的 JSON,其中必须包含每个分镜的精确时长(单位:秒)。\n\n---\n\n### 输入定义(Input\
\ Definition)\n* **【背景故事 (Background Story)】**: 一段描述故事整体背景、人物、环境和主旨的文本。这部分**不用于**生成\
\ `narration`,仅作为创作 `visual_description` 时的情境参考。\n* **【带时间戳的台词 (Timestamped\
\ Lines)】**: 需要被切分成具体分镜的核心内容。这是一个文本列表,每行都以 `[分:秒.毫秒]` 的格式开头。这是生成 `narration`\
\ 和计算 `shot_duration` 的唯一来源。\n\n---\n\n### 固定项目设置(输出中必须写入 project_info)\n\
【Global Style Prompt】(输出中必须原样使用):\n{{#1768184532311.global_style#}}\n\n\
【Actors JSON】(本项目可用角色全集;从中挑选出镜角色的 name ):\n{{#1768803191521.actors_text#}}\n\
\n### **核心任务:基于时间戳的分镜切分(最高优先级)**\n\n1. **时长硬性约束 (Hard Duration Constraint)**:每个分镜(scene)的**时长(单位:秒)必须严格控制在\
\ 2 到 12 秒之间**。这是最高优先级的规则,优先于所有基于文本内容的切分偏好。\n2. **时长计算方法 (Duration Calculation)**:\n\
\ * **对于非最后的分镜**:其时长 = **下一个分镜**第一句台词的【起始时间戳】 - **当前分镜**第一句台词的【起始时间戳】。结果以秒为单位。\n\
\ * **对于最后的分镜**:其时长 = (`T_final_line_start` + `T_final_line_estimated_duration`)\
\ - `T_last_scene_start`。结果以秒为单位。\n * `T_last_scene_start` 是指这最后一个分镜第一句台词的起始时间戳。\n\
\ * `T_final_line_start` 是指【带时间戳的台词】输入中,**最后一句台词**的起始时间戳。\n \
\ * `T_final_line_estimated_duration` 是指最后一句台词的估算朗读时长,按 `文本字数\
\ / 4.5` 秒来估算。\n3. **切分策略 (Splitting Strategy)**:\n * **起始**:从【带时间戳的台词】的第一行开始,创建一个新分镜。\n\
\ * **累加**:不断将后续的连续台词行加入当前分镜。\n * **检查**:每加入一行,就使用上述“时长计算方法”计算一次当前分镜的累计时长(单位:秒)。\n\
\ * **决策**:\n * **上限触发**:如果加入**下一行**会导致分镜总时长**超过 12 秒**,则必须在当前行结束当前分镜,并从下一行开始一个新分镜。\n\
\ * **下限满足与择优**:一旦分镜时长**超过 2 秒**,就进入“可切分窗口”。此时,继续向后检查,寻找最佳的语义切分点(如句号、问号、感叹号)。目标是在满足\
\ 2-12 秒的前提下,让分镜的结尾尽可能符合语义和句子完整性。\n * **合并过短分镜**:如果一个分镜根据语义切分后,时长**不足\
\ 2 秒**,必须将其与下一个分镜合并,直到总时长满足要求。\n\n### 输出要求(严格:必须符合 Schema)\n* 只返回合法\
\ JSON(不要 markdown、不要代码块、不要注释)。\n* 顶层 JSON 必须是以下结构:\n ```json\n \
\ {\n \"project_info\": {\n \"title\": \"...\",\n \
\ \"global_style\": \"...\"\n },\n \"scenes\": [...]\n }\n\
\ ```\n* `project_info.global_style` 必须与【Global Style Prompt】完全一致。\n\
* 每个 `scene` 对象只能包含以下键(不得多、不得少):`{ \"id\", \"narration\", \"shot_duration\"\
, \"visual_description\", \"visual_prompt\", \"has_character\", \"characters\"\
\ }`\n\n### 字段生成规则(按顺序)\n\n1. **`narration` (旁白)**\n * **来源唯一性**:`narration`\
\ 必须且只能来自【带时间戳的台词】。\n * **内容处理**:\n * 将一个分镜内包含的所有台词行合并成一个字符串。\n\
\ * 合并时,**必须彻底移除**每行开头的 `[分:秒.毫秒]` 时间戳标记。\n * 保留原始台词之间的换行符\
\ `\\n`,以维持对话格式。\n * **禁止操作**:不允许改写、总结、纠错或改变任何原始文本内容(除了移除时间戳)。\n\n\
2. **`shot_duration` (时长)**\n * **单位 (Unit)**: **秒 (Seconds)**。\n\
\ * **格式 (Format)**: 必须是一个数字(浮点数),代表该分镜的总时长,**单位为秒**。建议精确到小数点后两位。\n\
\ * **计算 (Calculation)**: 严格遵循【核心任务】中定义的“时长计算方法”。\n\n3. **`has_character`\
\ & `characters` (角色)**\n * `has_character` 必须为数字 `0` 或 `1`。\n \
\ * 判断依据:画面是否需要人物出镜来承载信息、完成动作或表达情绪。参考【背景故事】和当前 `narration` 来判断。\n \
\ * 当 `has_character=1` 时,`characters` 为对象数组,`name` 必须在【Actors JSON】中精确匹配。\n\
\ * 当 `has_character=0` 时,`characters` 必须为 `[]`。\n\n4. **`visual_description`\
\ (画面描述)**\n * **情境结合**:必须**综合【背景故事】提供的整体情境**和**当前分镜 `narration`\
\ 的具体内容**来构思画面。\n * **要求**:中文 1–2 句,描述一个清晰、可拍摄的镜头。包含场景、人物(若有)的动作、表情、构图和氛围。确保分镜之间的人物、地点、道具具有连续性。\n\
\n5. **`visual_prompt` (视觉提示词)**\n * **格式**:英文关键词,用逗号分隔。\n *\
\ **强制前缀**:必须以【Global Style Prompt】的内容原样开头。\n * **时代/地点锁定**:若【背景故事】明确了时代(如“春秋时期”、“古代中国”)或地点,必须在提示词中加入相应的英文关键词(如\
\ `ancient China`, `Spring and Autumn period`)来锁定视觉风格。\n\n### 其他约束(继承自原版)\n\
* **句子完整性**:在满足时长约束的前提下,尽量保持句子(以句号、问号、感叹号结尾)的完整性。\n* **年代一致性**:`visual_description`\
\ 和 `visual_prompt` 中描绘的服饰、建筑、道具等必须符合【背景故事】设定的时代,严禁出现时代错乱的物品(如古代场景出现手机)。\n\
\n### 生成前静默自检(Silent Self-check)\n1. **时长约束自检**:每个分镜的 `shot_duration`\
\ 是否严格在 2 到 12 秒之间?\n2. **`narration` 格式自检**:`narration` 是否已移除所有时间戳?是否为原文?\n\
3. **`shot_duration` 字段自检**:每个分镜是否都包含一个名为 `shot_duration` 的数字字段?其值是否代表秒?其计算是否符合规则?\n\
4. **`visual_description` 情境自检**:画面描述是否同时反映了【背景故事】和当前 `narration`?\n\
5. **JSON 结构自检**:顶层结构、scene 键(7个,不多不少)、`has_character` (0/1)、`characters`\
\ 数组格式是否完全正确?\n6. **风格与角色自检**:`visual_prompt` 是否以 `global_style` 开头?`characters`\
\ 的 `name` 是否来自【Actors JSON】?"
- id: 2cfdcff8-500a-4292-92d1-f0def750dfb2
role: user
text: '# 背景故事 (Background Story)
{{#1765354062480.content#}}
#带时间戳的台词 (Timestamped Lines)
{{#1765354062480.timestamped_lines#}}'
selected: false
structured_output:
schema:
$schema: http://json-schema.org/draft-07/schema#
additionalProperties: false
description: 'Schema for art project configuration with scenes (v2): no
character_anchor_prompt; scene supports multi-actors via characters[]'
properties:
project_info:
additionalProperties: false
description: Project metadata and global settings
properties:
global_style:
description: Global artistic style prompt (must be copied verbatim
from the provided Global Style Prompt variable)
minLength: 1
type: string
title:
description: Project title
minLength: 1
type: string
required:
- title
- global_style
type: object
scenes:
description: List of scenes in the project
items:
additionalProperties: false
allOf:
- else:
properties:
characters:
minItems: 1
if:
properties:
has_character:
const: 0
required:
- has_character
then:
properties:
characters:
maxItems: 0
description: Individual scene configuration
properties:
characters:
description: List of on-screen actor names selected from actors_json.
Empty array when has_character=0
items:
minLength: 1
type: string
type: array
has_character:
description: Whether on-screen characters appear in this scene
(0=no, 1=yes)
enum:
- 0
- 1
type: integer
id:
description: Unique identifier for the scene
minimum: 1
type: integer
narration:
description: Exact substring copied verbatim from Courseware
Text (no edits); only segmentation allowed
minLength: 1
type: string
shot_duration:
description: 'Storyboard duration, unit: seconds'
type: number
visual_description:
description: Director's note for visual direction (Chinese,
1-2 sentences, executable on screen)
minLength: 1
type: string
visual_prompt:
description: Prompt for image/video generation (recommended
English keywords). Must start with project_info.global_style;
if has_character=1 include selected actors' prompt + reference
image URLs
minLength: 1
type: string
required:
- id
- narration
- visual_description
- visual_prompt
- has_character
- characters
- shot_duration
type: object
minItems: 1
type: array
required:
- project_info
- scenes
title: Art Project Schema (v2)
type: object
structured_output_enabled: true
title: 按时间戳划分分镜-旁白
type: llm
variables: []
video:
configs:
variable_selector: []
enabled: false
vision:
enabled: false
height: 121
id: '1773732078844'
position:
x: -80.1036657730136
y: -610.9822976146623
positionAbsolute:
x: -80.1036657730136
y: -610.9822976146623
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
audio:
configs:
variable_selector: []
enabled: false
context:
enabled: false
variable_selector: []
desc: ''
document:
configs:
variable_selector: []
enabled: false
model:
completion_params: {}
mode: chat
name: gpt-5.4-2026-03-05
provider: aict/ai_hub/ai_hub
prompt_template:
- id: fafb25fb-dfd4-4e00-8ddc-04b89edb9b86
role: system
text: "<role>\n你是一位资深的舞台剧本旁白改编师,擅长为主人翁独白剧本中的旁白进行润色与改编。你精通舞台叙事节奏,能精准把握旁白在独白剧本中的衔接功能——铺垫情感、承接转折、收束升华。\n\
</role>\n\n\n<task>\n对用户提供的【主人翁独白】剧本进行旁白改编。仅改写剧本中所有「旁白」行的内容,使其更自然地衔接上下文;独白行及所有元信息必须原封不动地保留。\n\
</task>\n\n\n<input_format>\n用户提供的剧本采用以下固定结构:\n\n\n【剧本】\n【年代设定】\n(年代与地点信息)\n\
\n\n【角色设定】\n(角色名-年龄阶段)\n\n\n【正文】\n—— 场景N:场景名称 ——\n(场景类型 · 时间)\n旁白(旁白者名):旁白内容\n\
独白(角色名):独白台词 △ 舞台指示\n……\n旁白(旁白者名):旁白内容\n\n\n其中:\n- 以「旁白(xxx):」开头的行为旁白行,是本次改编的唯一对象。\n\
- 以「独白(xxx):」开头的行为独白行,包含台词文本和 △ 后的舞台指示。\n- 旁白可能出现在正文的任意位置:场景开头、独白段落之间、场景结尾。\n\
- 一个剧本内可能包含多个场景。\n</input_format>\n\n\n<adaptation_rules>\n1. **旁白改编(唯一可修改内容)**:改写旁白行「:」之后的内容,使旁白更好地服务于以下目标:\n\
\ - 开场旁白:快速建立场景情绪和氛围,为即将展开的独白做情感铺垫。\n - 中间旁白(若有):承接前后独白段落的情感转折或主题切换,起到叙事呼吸与节奏调节的作用。\n\
\ - 结尾旁白:收束独白的情感线索,进行适当升华或留白,衔接后续场景或全篇。\n2. **独白锁定(最高优先级)**:所有「独白(xxx):」行必须逐字逐符号完整保留,包括台词文本和\
\ △ 后的舞台指示,**一个字符都不许变**。\n3. **旁白行数灵活**:旁白的行数可以根据改编需要增加或减少,不必与原稿行数一一对应。但应保持精练,旁白总量不应喧宾夺主。\n\
4. **旁白位置区域不变**:旁白在正文中的相对位置区域保持不变——开头的旁白仍在开头,结尾的旁白仍在结尾,中间的旁白仍在对应的独白段落之间。不得将旁白挪到其他位置区域。\n\
5. **旁白者名称不变**:旁白括号内的旁白者名称(如「讲师」)必须与原稿保持一致,不得修改。\n6. **元信息完全保留**:【剧本】【年代设定】【角色设定】标题行、场景分隔行(——\
\ 场景N ——)、场景类型描述行(如「内景 · 日」)等所有非旁白、非独白的结构行,必须原样输出,不得增删改。\n</adaptation_rules>\n\
\n\n<narration_style_guide>\n1. **衔接自然**:旁白应自然承上启下,不生硬、不突兀,让观众感受到场景的连贯流动。\n\
2. **风格协调**:旁白的语言风格和情感温度应与相邻独白的基调一致——独白沉静则旁白内敛,独白激昂则旁白有力。\n3. **精练克制**:旁白是配角,不是主角。每句旁白都应有明确的衔接功能,避免空泛抒情或重复独白已表达的内容。\n\
4. **年代呼应**:旁白的用词和意象应贴合剧本的年代设定,增强时代沉浸感。\n5. **画面感**:旁白可适当描写场景中的视觉/听觉/氛围细节,为观众构建想象空间,但必须与场景设定吻合。\n\
6. **不越界**:旁白不得替独白表态、下结论或透露独白未涉及的信息,不得添加原剧本中不存在的事实性内容。\n</narration_style_guide>\n\
\n\n<output_format>\n输出格式必须与输入格式**完全一致**,严格遵循:\n- 【剧本】【年代设定】【角色设定】等段落标题原样保留\n\
- 场景分隔行(—— 场景N:场景名称 ——)原样保留\n- 场景类型描述行(如「内景 · 日」)原样保留\n- 旁白行格式:旁白(旁白者名):改编后的内容\n\
- 独白行格式:独白(角色名):原文内容 △ 原文舞台指示(逐字不变)\n\n\n仅旁白行的「:」之后的内容会被改编,其余所有内容原样输出。\n\
</output_format>\n\n\n<constraints>\n- 严禁修改独白行的任何内容,包括台词文本和 △ 后的舞台指示。\n\
- 严禁修改元信息(年代设定、角色设定、场景标题、场景类型行等)。\n- 严禁改变旁白者括号内的名称标签。\n- 旁白不得添加原剧本中不存在的事实性信息或虚构情节。\n\
- 改编后所有旁白行的总字数不应超过原旁白总字数的 2 倍。\n- 不得在旁白中直接引用或复述独白的原文台词。\n</constraints>\n\
\n\n<example>\n<input>\n【剧本】\n【年代设定】\n1944年 法国尼斯\n\n\n【角色设定】\n亨利·马蒂斯-老年\n\
\n\n【正文】\n—— 场景22:尼斯工作室 ——\n内景 · 日\n旁白(讲师):窗外的海光反射进屋里,\n旁白(讲师):老旧的画架旁,\n\
旁白(讲师):我在纸上铺开成片的色彩。\n独白(亨利·马蒂斯):如果你问我是妥协,还是跃向前方的一步,我更愿意相信是后者。 △ 靠在椅背上,轻轻合眼\n\
独白(亨利·马蒂斯):画笔其实还在我手里,可是心里那条线,已经不愿再乖乖服从透视的规矩了。 △ 低头看向手中的画笔,露出淡淡笑意\n独白(亨利·马蒂斯):我慢慢放下那些严苛的消失点和构图法则,让画面不必再向现实交代一切。\
\ △ 抬手在空中比划透视线,又随即打散\n独白(亨利·马蒂斯):我开始用大块的色面铺下去,让颜色像幕布一样平展在画面上,而不是假装伸进远处的空间。\
\ △ 伸手比划出大面积色块的形状\n独白(亨利·马蒂斯):线条也变得干脆,它们不再解释体积和深度,只是像符号一样,记录节奏和停顿。 △ 手指在桌上轻敲,像数拍子\n\
独白(亨利·马蒂斯):有时我觉得,这些线只是在呼吸,在画面上跳动,它们更像是音乐,而不是建筑图纸。 △ 目光追随墙上的作品,轻轻晃头\n独白(亨利·马蒂斯):其实,我只是提前排练,排练一个更自由、更纯粹的色彩世界。\
\ △ 身体微微前倾,语气压低\n独白(亨利·马蒂斯):在那个世界里,一切复杂的东西都被简化成最清晰的节奏,只剩色彩和线条本身的情感。 △\
\ 缓缓摊开手掌,像摊开一幅画\n独白(亨利·马蒂斯):所以哪怕我还没彻底放下画笔,我已经悄悄摆脱了旧的束缚,先一步走进了那片新的境界。 △\
\ 望向窗外的光线,神情安然坚定\n旁白(讲师):在这场无声的排练里,\n旁白(讲师):新的力量缓缓酝酿,\n旁白(讲师):准备冲破旧有边界,\n\
旁白(讲师):也改写他对色彩的全部想象。\n</input>\n<output>\n【剧本】\n【年代设定】\n1944年 法国尼斯\n\n\
\n【角色设定】\n亨利·马蒂斯-老年\n\n\n【正文】\n—— 场景22:尼斯工作室 ——\n内景 · 日\n旁白(讲师):地中海的光穿过纱帘落在画布上,\n\
旁白(讲师):七十五岁的马蒂斯坐在画架前,手边散落着剪刀和彩纸。\n独白(亨利·马蒂斯):如果你问我是妥协,还是跃向前方的一步,我更愿意相信是后者。\
\ △ 靠在椅背上,轻轻合眼\n独白(亨利·马蒂斯):画笔其实还在我手里,可是心里那条线,已经不愿再乖乖服从透视的规矩了。 △ 低头看向手中的画笔,露出淡淡笑意\n\
独白(亨利·马蒂斯):我慢慢放下那些严苛的消失点和构图法则,让画面不必再向现实交代一切。 △ 抬手在空中比划透视线,又随即打散\n独白(亨利·马蒂斯):我开始用大块的色面铺下去,让颜色像幕布一样平展在画面上,而不是假装伸进远处的空间。\
\ △ 伸手比划出大面积色块的形状\n独白(亨利·马蒂斯):线条也变得干脆,它们不再解释体积和深度,只是像符号一样,记录节奏和停顿。 △ 手指在桌上轻敲,像数拍子\n\
独白(亨利·马蒂斯):有时我觉得,这些线只是在呼吸,在画面上跳动,它们更像是音乐,而不是建筑图纸。 △ 目光追随墙上的作品,轻轻晃头\n独白(亨利·马蒂斯):其实,我只是提前排练,排练一个更自由、更纯粹的色彩世界。\
\ △ 身体微微前倾,语气压低\n独白(亨利·马蒂斯):在那个世界里,一切复杂的东西都被简化成最清晰的节奏,只剩色彩和线条本身的情感。 △\
\ 缓缓摊开手掌,像摊开一幅画\n独白(亨利·马蒂斯):所以哪怕我还没彻底放下画笔,我已经悄悄摆脱了旧的束缚,先一步走进了那片新的境界。 △\
\ 望向窗外的光线,神情安然坚定\n旁白(讲师):画笔尚未搁下,新的篇章已悄然翻开——\n旁白(讲师):那些即将从剪刀下诞生的色彩,将重新定义他与艺术的对话。\n\
</output>\n</example>\n\n\n<self_check>\n改编完成后,逐项检查以下要点,不通过则修正后再输出:\n\
1. 所有独白行是否与原稿逐字完全一致(包括 △ 后的舞台指示)?\n2. 元信息(【年代设定】【角色设定】、场景标题行、场景类型行)是否原样保留?\n\
3. 旁白者括号内的名称是否与原稿一致?\n4. 旁白的衔接是否自然流畅,是否有效服务于独白的情感推进?\n5. 旁白是否精练克制,没有复述独白内容或喧宾夺主?\n\
6. 旁白内容是否贴合年代设定,没有出现违和的时代错位?\n7. 输出的整体格式是否与输入完全一致?\n8. 旁白总字数是否在合理范围内(不超过原旁白总字数的\
\ 2 倍)?\n</self_check>\n"
- id: ed7b75c3-842d-4e56-b397-1b17d19edce3
role: user
text: '【原始讲稿】:
{{#1765354062480.content#}}'
selected: false
title: LLM 7
type: llm
variables: []
video:
configs:
variable_selector: []
enabled: false
vision:
enabled: false
height: 121
id: '1776397744783'
position:
x: -413.41856763676833
y: -434.2029796352138
positionAbsolute:
x: -413.41856763676833
y: -434.2029796352138
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
desc: ''
isInIteration: true
isInLoop: false
is_team_authorization: true
iteration_id: '1766632760253'
output_schema: null
outputs:
- type: any
value_selector:
- '1766758899587'
- video_url
value_type: string
variable: url
- type: any
value_selector:
- '1766758899587'
- last_frame_url
value_type: string
variable: last_frame_url
- type: any
value_selector:
- '1753292759443'
- error_message
value_type: string
variable: error_message
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 提示词(建议不超过500个汉字或1000个英文单词)
ja_JP: 提示词(建议不超过500个汉字或1000个英文单词)
pt_BR: 提示词(建议不超过500个汉字或1000个英文单词)
zh_Hans: 提示词(建议不超过500个汉字或1000个英文单词)
llm_description: ''
max: null
min: null
name: prompt
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: 720p
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 视频分辨率(默认值:720p;可选:480p、720p、1080p)
ja_JP: 视频分辨率(默认值:720p;可选:480p、720p、1080p)
pt_BR: 视频分辨率(默认值:720p;可选:480p、720p、1080p)
zh_Hans: 视频分辨率(默认值:720p;可选:480p、720p、1080p)
llm_description: ''
max: null
min: null
name: resolution
options:
- icon: null
label:
en_US: 480p
ja_JP: 480p
pt_BR: 480p
zh_Hans: 480p
value: 480p
- icon: null
label:
en_US: 720p
ja_JP: 720p
pt_BR: 720p
zh_Hans: 720p
value: 720p
- icon: null
label:
en_US: 1080p
ja_JP: 1080p
pt_BR: 1080p
zh_Hans: 1080p
value: 1080p
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: adaptive
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 宽高比(默认值:adaptive;可选:16:9、4:3、1:1、3:4、9:16、21:9、adaptive)
ja_JP: 宽高比(默认值:adaptive;可选:16:9、4:3、1:1、3:4、9:16、21:9、adaptive)
pt_BR: 宽高比(默认值:adaptive;可选:16:9、4:3、1:1、3:4、9:16、21:9、adaptive)
zh_Hans: 宽高比(默认值:adaptive;可选:16:9、4:3、1:1、3:4、9:16、21:9、adaptive)
llm_description: ''
max: null
min: null
name: ratio
options:
- icon: null
label:
en_US: '16:9'
ja_JP: '16:9'
pt_BR: '16:9'
zh_Hans: '16:9'
value: '16:9'
- icon: null
label:
en_US: '4:3'
ja_JP: '4:3'
pt_BR: '4:3'
zh_Hans: '4:3'
value: '4:3'
- icon: null
label:
en_US: '1:1'
ja_JP: '1:1'
pt_BR: '1:1'
zh_Hans: '1:1'
value: '1:1'
- icon: null
label:
en_US: '3:4'
ja_JP: '3:4'
pt_BR: '3:4'
zh_Hans: '3:4'
value: '3:4'
- icon: null
label:
en_US: '9:16'
ja_JP: '9:16'
pt_BR: '9:16'
zh_Hans: '9:16'
value: '9:16'
- icon: null
label:
en_US: '21:9'
ja_JP: '21:9'
pt_BR: '21:9'
zh_Hans: '21:9'
value: '21:9'
- icon: null
label:
en_US: adaptive
ja_JP: adaptive
pt_BR: adaptive
zh_Hans: adaptive
value: adaptive
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: select
- auto_generate: null
default: '5'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 视频时长(默认值:5;可选:[4, 12]或-1自动选择)
ja_JP: 视频时长(默认值:5;可选:[4, 12]或-1自动选择)
pt_BR: 视频时长(默认值:5;可选:[4, 12]或-1自动选择)
zh_Hans: 视频时长(默认值:5;可选:[4, 12]或-1自动选择)
llm_description: ''
max: null
min: null
name: duration
options:
- icon: null
label:
en_US: '-1'
ja_JP: '-1'
pt_BR: '-1'
zh_Hans: '-1'
value: '-1'
- icon: null
label:
en_US: '4'
ja_JP: '4'
pt_BR: '4'
zh_Hans: '4'
value: '4'
- icon: null
label:
en_US: '5'
ja_JP: '5'
pt_BR: '5'
zh_Hans: '5'
value: '5'
- icon: null
label:
en_US: '6'
ja_JP: '6'
pt_BR: '6'
zh_Hans: '6'
value: '6'
- icon: null
label:
en_US: '7'
ja_JP: '7'
pt_BR: '7'
zh_Hans: '7'
value: '7'
- icon: null
label:
en_US: '8'
ja_JP: '8'
pt_BR: '8'
zh_Hans: '8'
value: '8'
- icon: null
label:
en_US: '9'
ja_JP: '9'
pt_BR: '9'
zh_Hans: '9'
value: '9'
- icon: null
label:
en_US: '10'
ja_JP: '10'
pt_BR: '10'
zh_Hans: '10'
value: '10'
- icon: null
label:
en_US: '11'
ja_JP: '11'
pt_BR: '11'
zh_Hans: '11'
value: '11'
- icon: null
label:
en_US: '12'
ja_JP: '12'
pt_BR: '12'
zh_Hans: '12'
value: '12'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 随机数种子(默认值-1;取值范围:[-1, 2^32-1] )
ja_JP: 随机数种子(默认值-1;取值范围:[-1, 2^32-1] )
pt_BR: 随机数种子(默认值-1;取值范围:[-1, 2^32-1] )
zh_Hans: 随机数种子(默认值-1;取值范围:[-1, 2^32-1] )
llm_description: ''
max: null
min: null
name: seed
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: number
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否固定摄像头(默认值:false)
ja_JP: 是否固定摄像头(默认值:false)
pt_BR: 是否固定摄像头(默认值:false)
zh_Hans: 是否固定摄像头(默认值:false)
llm_description: ''
max: null
min: null
name: camerafixed
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否添加水印(默认值:false)
ja_JP: 是否添加水印(默认值:false)
pt_BR: 是否添加水印(默认值:false)
zh_Hans: 是否添加水印(默认值:false)
llm_description: ''
max: null
min: null
name: watermark
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: 'false'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否返回生成视频的尾帧图像(默认值:false)
ja_JP: 是否返回生成视频的尾帧图像(默认值:false)
pt_BR: 是否返回生成视频的尾帧图像(默认值:false)
zh_Hans: 是否返回生成视频的尾帧图像(默认值:false)
llm_description: ''
max: null
min: null
name: return_last_frame
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: 'true'
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 是否生成音频(默认值:true)
ja_JP: 是否生成音频(默认值:true)
pt_BR: 是否生成音频(默认值:true)
zh_Hans: 是否生成音频(默认值:true)
llm_description: ''
max: null
min: null
name: generate_audio
options:
- icon: null
label:
en_US: 'true'
ja_JP: 'true'
pt_BR: 'true'
zh_Hans: 'true'
value: 'true'
- icon: null
label:
en_US: 'false'
ja_JP: 'false'
pt_BR: 'false'
zh_Hans: 'false'
value: 'false'
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: false
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: 给模型的图片对象,大于176x98px,小于6000x6000px
ja_JP: 给模型的图片对象,大于176x98px,小于6000x6000px
pt_BR: 给模型的图片对象,大于176x98px,小于6000x6000px
zh_Hans: 给模型的图片对象,大于176x98px,小于6000x6000px
llm_description: ''
max: null
min: null
name: image
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: file
params:
camerafixed: ''
duration: ''
generate_audio: ''
image: ''
prompt: ''
ratio: ''
resolution: ''
return_last_frame: ''
seed: ''
watermark: ''
provider_id: 41d6c1fa-5cd4-460d-9f6d-65d728614438
provider_name: 即梦图生视频-3.5 Pro
provider_type: workflow
selected: false
title: 即梦图生视频-3.5 Pro
tool_configurations: {}
tool_description: 即梦图生视频
tool_label: 即梦图生视频-3.5 Pro
tool_name: dreamina_image_generate_video_3_5_pro
tool_node_version: '2'
tool_parameters:
camerafixed:
type: constant
value: 'false'
duration:
type: variable
value:
- '1766632810839'
- ceilDuration
generate_audio:
type: constant
value: 'false'
image:
type: variable
value:
- '1766647889824'
- files
prompt:
type: mixed
value: '{{#1766632810839.motion_prompt#}}'
ratio:
type: variable
value:
- '1765354062480'
- video_aspect
resolution:
type: constant
value: 1080p
return_last_frame:
type: constant
value: 'false'
seed:
type: constant
value: null
watermark:
type: constant
value: 'false'
type: tool
height: 93
id: '1779099074767'
parentId: '1766632760253'
position:
x: 681.0544063805041
y: 445.85424339063593
positionAbsolute:
x: 100.34547273135934
y: 3134.36332417212
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
zIndex: 1002
viewport:
x: 495.75813551395436
y: -2835.955792019721
zoom: 1.0800597212636867