app: description: 通用剧本创作工作流 - 同时生成大纲、写作、拆解并导出DOCX icon: 🎞️ icon_background: '#E8F5E9' mode: workflow name: 剧本创作通用工作流-v2 use_icon_as_answer_icon: false dependencies: - current_identifier: null type: marketplace value: marketplace_plugin_unique_identifier: bowenliang123/md_exporter:2.2.0@9f39c2c2c1cd09180e2cc053090adc9886019483f502727467f136712b8b9639 version: null - current_identifier: null type: marketplace value: marketplace_plugin_unique_identifier: langgenius/deepseek:0.0.11@35bcd3f233f99d07bdadef8b326945df3bda5e8f773330144bc90d84800336b9 version: null kind: app version: 0.5.0 workflow: conversation_variables: [] environment_variables: [] features: file_upload: enabled: false opening_statement: '输入项目设定后,将自动同时生成:项目大纲、单集草稿、拆解素材,并导出为DOCX。' retriever_resource: enabled: false 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: false isInLoop: false sourceType: start targetType: llm id: 2040748800000-source-2040748800001-target source: '2040748800000' sourceHandle: source target: '2040748800001' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: llm targetType: llm id: 2040748800001-source-2040748800002-target source: '2040748800001' sourceHandle: source target: '2040748800002' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: start targetType: llm id: 2040748800000-source-2040748800003-target source: '2040748800000' sourceHandle: source target: '2040748800003' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: llm targetType: code id: 2040748800001-source-2040748800004-target source: '2040748800001' sourceHandle: source target: '2040748800004' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: llm targetType: code id: 2040748800002-source-2040748800004-target source: '2040748800002' sourceHandle: source target: '2040748800004' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: llm targetType: code id: 2040748800003-source-2040748800004-target source: '2040748800003' sourceHandle: source target: '2040748800004' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: code targetType: tool id: 2040748800004-source-2040748800005-target source: '2040748800004' sourceHandle: source target: '2040748800005' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: tool targetType: end id: 2040748800005-source-2040748800006-target source: '2040748800005' sourceHandle: source target: '2040748800006' targetHandle: target type: custom zIndex: 0 nodes: - data: selected: false title: 开始 type: start variables: - default: '' hint: '' label: 项目名 max_length: 120 options: [] placeholder: '' required: true type: text-input variable: project_name - default: '' hint: '' label: 核心一句话 max_length: 500 options: [] placeholder: '' required: true type: paragraph variable: core_idea - default: '' hint: '' label: 时代与世界观 max_length: 1200 options: [] placeholder: '' required: true type: paragraph variable: world_setting - default: '' hint: '' label: 角色设定 max_length: 2500 options: [] placeholder: '' required: true type: paragraph variable: character_setup - default: '' hint: '' label: 风格参考 max_length: 1200 options: [] placeholder: '' required: false type: paragraph variable: style_reference - default: '' hint: '' label: 当前任务目标 max_length: 1200 options: [] placeholder: '' required: false type: paragraph variable: task_goal - default: 第1集 hint: '' label: 目标集数(用于单集生成) max_length: 32 options: [] placeholder: 例如:第1集 / 第10集 required: true type: text-input variable: target_episode - default: '' hint: '' label: 已有文本(用于拆解) max_length: 8000 options: [] placeholder: '' required: false type: paragraph variable: existing_text height: 250 id: '2040748800000' position: x: 80 y: 260 positionAbsolute: x: 80 y: 260 selected: false sourcePosition: right targetPosition: left type: custom width: 260 - data: context: enabled: false variable_selector: [] desc: 生成项目总纲和分集卡点 model: completion_params: temperature: 0.7 max_tokens: 3200 mode: chat name: deepseek-chat provider: langgenius/deepseek/deepseek prompt_template: - id: sys-001 role: system text: | 你是资深剧集编剧统筹。输出务必具体、可执行。 输出格式(Markdown): # A. 项目总纲 ## 核心卖点(3条) ## 世界观规则(5条) ## 主角成长弧(起点-转折-代价-终局) ## 关键配角弧(至少3人) ## 三幕式结构(每幕目标、冲突、爆点) ## 20集分集卡点(每集2-3句,含结尾钩子) ## 风险与修正建议(至少5条) - id: usr-001 role: user text: | 项目名:{{#2040748800000.project_name#}} 核心一句话:{{#2040748800000.core_idea#}} 时代与世界观:{{#2040748800000.world_setting#}} 角色设定:{{#2040748800000.character_setup#}} 风格参考:{{#2040748800000.style_reference#}} 当前任务目标:{{#2040748800000.task_goal#}} selected: false title: 大纲统筹AI type: llm variables: [] height: 98 id: '2040748800001' position: x: 420 y: 80 positionAbsolute: x: 420 y: 80 selected: false sourcePosition: right targetPosition: left type: custom width: 260 - data: context: enabled: false variable_selector: [] desc: 基于A总纲生成指定集数的单集草稿 model: completion_params: temperature: 0.72 max_tokens: 3200 mode: chat name: deepseek-chat provider: langgenius/deepseek/deepseek prompt_template: - id: sys-002 role: system text: | 你是影视剧本执笔编剧。你的唯一依据是输入的“A.项目总纲”,必须严格对齐,不得偏离。 输出格式(Markdown): # B. 单集剧本草稿 ## 对齐检查(先输出) - 目标集数: - 对应总纲卡点原文: - 本集承接上集/推进主线说明: ## 集标题 ## 本集主题与冲突 ## 场景列表(8-12场) 每场格式:场次编号 / 时空标记 / 画面动作 / 关键对白 / 场尾钩子 ## 节奏检查 - 前10%钩子 - 中段升级 - 结尾不可逆变化 硬性约束: 1. 仅生成“目标集数”对应内容 2. 不得新增会破坏总纲主线的关键设定 3. 角色关系与能力边界必须与总纲一致 4. 信息不足时,只做最小补全并显式标注“补全假设” - id: usr-002 role: user text: | A.项目总纲全文: {{#2040748800001.text#}} 项目名:{{#2040748800000.project_name#}} 目标集数:{{#2040748800000.target_episode#}} 核心一句话:{{#2040748800000.core_idea#}} 时代与世界观:{{#2040748800000.world_setting#}} 角色设定:{{#2040748800000.character_setup#}} 风格参考:{{#2040748800000.style_reference#}} 当前任务目标:{{#2040748800000.task_goal#}} selected: false title: 剧本写作AI type: llm variables: [] height: 98 id: '2040748800002' position: x: 420 y: 280 positionAbsolute: x: 420 y: 280 selected: false sourcePosition: right targetPosition: left type: custom width: 260 - data: context: enabled: false variable_selector: [] desc: 将已有剧本拆解为短视频与图文素材 model: completion_params: temperature: 0.65 max_tokens: 3200 mode: chat name: deepseek-chat provider: langgenius/deepseek/deepseek prompt_template: - id: sys-003 role: system text: | 你是内容拆解与改编总监。 输出格式(Markdown): # C. 剧本拆解包 ## 剧情主线摘要(150字内) ## 关键角色卡(主角+2配角) ## 分镜提纲(6-10镜头) ## 60秒口播稿 ## 小红书笔记版文案(220-320字) ## 标题10条(悬念/反差/结论) ## 封面文案3组(主+副) 约束:不改变原剧情核心事件,不凭空新增关键设定。 - id: usr-003 role: user text: | 项目名:{{#2040748800000.project_name#}} 风格参考:{{#2040748800000.style_reference#}} 当前任务目标:{{#2040748800000.task_goal#}} 已有文本:{{#2040748800000.existing_text#}} selected: false title: 剧本拆解AI type: llm variables: [] height: 98 id: '2040748800003' position: x: 420 y: 480 positionAbsolute: x: 420 y: 480 selected: false sourcePosition: right targetPosition: left type: custom width: 260 - data: code: | function main({project_name, outline_text, writing_text, breakdown_text}) { const md = `# ${project_name} - 剧本创作输出包\n\n${outline_text}\n\n---\n\n${writing_text}\n\n---\n\n${breakdown_text}`; return { merged_markdown: md, output_name: `${project_name}-剧本创作输出包` }; } code_language: javascript outputs: merged_markdown: children: null type: string output_name: children: null type: string selected: false title: 合并Markdown type: code variables: - value_selector: - '2040748800000' - project_name value_type: string variable: project_name - value_selector: - '2040748800001' - text value_type: string variable: outline_text - value_selector: - '2040748800002' - text value_type: string variable: writing_text - value_selector: - '2040748800003' - text value_type: string variable: breakdown_text height: 52 id: '2040748800004' position: x: 780 y: 280 positionAbsolute: x: 780 y: 280 selected: false sourcePosition: right targetPosition: left type: custom width: 260 - data: is_team_authorization: true paramSchemas: - auto_generate: null default: null form: llm human_description: en_US: Markdown text zh_Hans: Markdown格式文本 label: en_US: Markdown text zh_Hans: Markdown格式文本 llm_description: '' max: null min: null name: md_text options: [] placeholder: null precision: null required: true scope: null template: null type: string - auto_generate: null default: null form: llm human_description: en_US: Optional docx template file for styling zh_Hans: 可选的docx模板文件,用于样式控制 label: en_US: DOCX Template File zh_Hans: DOCX 模板文件 llm_description: '' max: null min: null name: docx_template_file options: [] placeholder: null precision: null required: false scope: null template: null type: file - auto_generate: null default: null form: llm human_description: en_US: Optional custom output file name zh_Hans: 可选的自定义输出文件名 label: en_US: Output Filename zh_Hans: 输出文件名 llm_description: '' max: null min: null name: output_filename options: [] placeholder: null precision: null required: false scope: null template: null type: string params: docx_template_file: '' md_text: '' output_filename: '' plugin_id: bowenliang123/md_exporter plugin_unique_identifier: bowenliang123/md_exporter:2.2.0@9f39c2c2c1cd09180e2cc053090adc9886019483f502727467f136712b8b9639 provider_icon: /console/api/workspaces/current/plugin/icon provider_id: bowenliang123/md_exporter/md_exporter provider_name: bowenliang123/md_exporter/md_exporter provider_type: builtin selected: false title: Markdown 转 DOCX 文件 tool_configurations: {} tool_description: 将 Markdown 转换为 DOCX 文件的工具 tool_label: Markdown 转 DOCX 文件 tool_name: md_to_docx tool_node_version: '2' tool_parameters: docx_template_file: type: constant value: null md_text: type: mixed value: '{{#2040748800004.merged_markdown#}}' output_filename: type: mixed value: '{{#2040748800004.output_name#}}' type: tool height: 52 id: '2040748800005' position: x: 1140 y: 280 positionAbsolute: x: 1140 y: 280 selected: false sourcePosition: right targetPosition: left type: custom width: 260 - data: outputs: - value_selector: - '2040748800004' - merged_markdown value_type: string variable: merged_markdown - value_selector: - '2040748800005' - files value_type: array[file] variable: docx_files selected: false title: 输出 type: end height: 114 id: '2040748800006' position: x: 1460 y: 280 positionAbsolute: x: 1460 y: 280 selected: false sourcePosition: right targetPosition: left type: custom width: 260