AI生产线自动化搭建资料库
资料页面

古诗词Mv生产-视频

来源:/Users/ljn/Desktop/自动化搭建/AI生产线知识库/raw/old_dsl/古诗词Mv生产-视频.yml

古诗词Mv生产-视频

这是知识库中的旧 DSL 案例。DSL 本身是机器文件,下面保留原始 YAML,供后续迭代、对照和排错使用。

文件大小
227874 bytes
来源路径
/Users/ljn/Desktop/自动化搭建/AI生产线知识库/raw/old_dsl/古诗词Mv生产-视频.yml
app:
  description: 古诗词Mv生产
  icon: 🤖
  icon_background: '#E3E5E8'
  icon_type: emoji
  mode: workflow
  name: 古诗词Mv生产-视频
  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: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1775806793494-source-1775804956739-target
      selected: false
      source: '1775806793494'
      sourceHandle: source
      target: '1775804956739'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: tool
        targetType: end
      id: 1775804956739-source-1775575749620-target
      selected: false
      source: '1775804956739'
      sourceHandle: source
      target: '1775575749620'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: iteration-start
        targetType: code
      id: 1776187568336start-source-1776187788358-target
      selected: false
      source: 1776187568336start
      sourceHandle: source
      target: '1776187788358'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: image-generation
        targetType: code
      id: 1776187614988-source-1776189738219-target
      selected: false
      source: '1776187614988'
      sourceHandle: source
      target: '1776189738219'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: code
        targetType: if-else
      id: 1776187788358-source-1776193156140-target
      selected: false
      source: '1776187788358'
      sourceHandle: source
      target: '1776193156140'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: if-else
        targetType: image-generation
      id: 1776193156140-false-1776187614988-target
      selected: false
      source: '1776193156140'
      sourceHandle: 'false'
      target: '1776187614988'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInLoop: false
        sourceType: code
        targetType: llm
      id: 1776124924070-source-1776687137943-target
      selected: false
      source: '1776124924070'
      sourceHandle: source
      target: '1776687137943'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: if-else
        targetType: if-else
      id: 1776193156140-true-1776989404798-target
      selected: false
      source: '1776193156140'
      sourceHandle: 'true'
      target: '1776989404798'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: tool
        targetType: code
      id: 1776989550852-source-1776189738219-target
      selected: false
      source: '1776989550852'
      sourceHandle: source
      target: '1776189738219'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: if-else
        targetType: question-classifier
      id: 1776989404798-true-1777868597968-target
      selected: false
      source: '1776989404798'
      sourceHandle: 'true'
      target: '1777868597968'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: question-classifier
        targetType: tool
      id: 1777868597968-1-1776989550852-target
      selected: false
      source: '1777868597968'
      sourceHandle: '1'
      target: '1776989550852'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        sourceType: code
        targetType: llm
      id: 1776688518682-source-1777870559743-target
      selected: false
      source: '1776688518682'
      sourceHandle: source
      target: '1777870559743'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        sourceType: iteration-start
        targetType: code
      id: 1775586681775start-source-1776688518682-target
      selected: false
      source: 1775586681775start
      sourceHandle: source
      target: '1776688518682'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        sourceType: video-generation
        targetType: code
      id: 1778328331140-source-1775594043410-target
      selected: false
      source: '1778328331140'
      sourceHandle: source
      target: '1775594043410'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: if-else
        targetType: image-generation
      id: 1776989404798-false-1778482590738-target
      selected: false
      source: '1776989404798'
      sourceHandle: 'false'
      target: '1778482590738'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: question-classifier
        targetType: image-generation
      id: 1777868597968-2-1778482590738-target
      selected: false
      source: '1777868597968'
      sourceHandle: '2'
      target: '1778482590738'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        sourceType: image-generation
        targetType: code
      id: 1778482590738-source-1776189738219-target
      selected: false
      source: '1778482590738'
      sourceHandle: source
      target: '1776189738219'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        sourceType: llm
        targetType: if-else
      id: 1777870559743-source-1778488487584-target
      selected: false
      source: '1777870559743'
      sourceHandle: source
      target: '1778488487584'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        sourceType: if-else
        targetType: video-generation
      id: 1778488487584-true-1778328331140-target
      selected: false
      source: '1778488487584'
      sourceHandle: 'true'
      target: '1778328331140'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        sourceType: if-else
        targetType: video-generation
      id: 1778488487584-false-1778488520258-target
      selected: false
      source: '1778488487584'
      sourceHandle: 'false'
      target: '1778488520258'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        sourceType: video-generation
        targetType: code
      id: 1778488520258-source-1775594043410-target
      selected: false
      source: '1778488520258'
      sourceHandle: source
      target: '1775594043410'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInLoop: false
        sourceType: code
        targetType: code
      id: 1778240988065-source-1778489931678-target
      source: '1778240988065'
      sourceHandle: source
      target: '1778489931678'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: llm
        targetType: code
      id: 1778239776377-source-1778240988065-target
      source: '1778239776377'
      sourceHandle: source
      target: '1778240988065'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778489931678-source-1778490000338-target
      source: '1778489931678'
      sourceHandle: source
      target: '1778490000338'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: llm
      id: 1778490000338-source-1776060778449-target
      source: '1778490000338'
      sourceHandle: source
      target: '1776060778449'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778489931678-fail-branch-1778490000338-target
      source: '1778489931678'
      sourceHandle: fail-branch
      target: '1778490000338'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: tool
        targetType: llm
      id: 1778490000338-fail-branch-1776060778449-target
      source: '1778490000338'
      sourceHandle: fail-branch
      target: '1776060778449'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: llm
        targetType: code
      id: 1776060778449-source-1778490195335-target
      source: '1776060778449'
      sourceHandle: source
      target: '1778490195335'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778490195335-source-1778490533680-target
      source: '1778490195335'
      sourceHandle: source
      target: '1778490533680'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: code
      id: 1778490533680-source-1776124924070-target
      source: '1778490533680'
      sourceHandle: source
      target: '1776124924070'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778490195335-fail-branch-1778490533680-target
      source: '1778490195335'
      sourceHandle: fail-branch
      target: '1778490533680'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: tool
        targetType: code
      id: 1778490533680-fail-branch-1776124924070-target
      source: '1778490533680'
      sourceHandle: fail-branch
      target: '1776124924070'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: llm
        targetType: code
      id: 1776687137943-source-1778490652080-target
      source: '1776687137943'
      sourceHandle: source
      target: '1778490652080'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: llm
        targetType: code
      id: 1776687137943-source-1778490682327-target
      source: '1776687137943'
      sourceHandle: source
      target: '1778490682327'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778490652080-source-1778491060957-target
      source: '1778490652080'
      sourceHandle: source
      target: '1778491060957'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: iteration
      id: 1778491060957-source-1776187568336-target
      source: '1778491060957'
      sourceHandle: source
      target: '1776187568336'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778490682327-source-1778491085262-target
      source: '1778490682327'
      sourceHandle: source
      target: '1778491085262'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: tool
        targetType: iteration
      id: 1778491085262-source-1776187568336-target
      source: '1778491085262'
      sourceHandle: source
      target: '1776187568336'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778491598257-source-1778491798610-target
      source: '1778491598257'
      sourceHandle: source
      target: '1778491798610'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: iteration
      id: 1778491798610-source-1775586681775-target
      source: '1778491798610'
      sourceHandle: source
      target: '1775586681775'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778491598257-fail-branch-1778491798610-target
      source: '1778491598257'
      sourceHandle: fail-branch
      target: '1778491798610'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: tool
        targetType: iteration
      id: 1778491798610-fail-branch-1775586681775-target
      source: '1778491798610'
      sourceHandle: fail-branch
      target: '1775586681775'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: iteration
        targetType: code
      id: 1775586681775-source-1778491967963-target
      source: '1775586681775'
      sourceHandle: source
      target: '1778491967963'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778491967963-source-1778492144233-target
      source: '1778491967963'
      sourceHandle: source
      target: '1778492144233'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: code
      id: 1778492144233-source-1775806793494-target
      source: '1778492144233'
      sourceHandle: source
      target: '1775806793494'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: tool
        targetType: code
      id: 1778492144233-fail-branch-1775806793494-target
      source: '1778492144233'
      sourceHandle: fail-branch
      target: '1775806793494'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1778491967963-fail-branch-1778492144233-target
      source: '1778491967963'
      sourceHandle: fail-branch
      target: '1778492144233'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: start
        targetType: code
      id: 1775575463958-source-1778567791902-target
      source: '1775575463958'
      sourceHandle: source
      target: '1778567791902'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: llm
      id: 1778567791902-source-1778239776377-target
      source: '1778567791902'
      sourceHandle: source
      target: '1778239776377'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: iteration
        targetType: code
      id: 1776187568336-source-1778664916524-target
      source: '1776187568336'
      sourceHandle: source
      target: '1778664916524'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: code
      id: 1778664916524-source-1778491598257-target
      source: '1778664916524'
      sourceHandle: source
      target: '1778491598257'
      targetHandle: target
      type: custom
      zIndex: 0
    nodes:
    - data:
        desc: ''
        selected: false
        title: 开始
        type: start
        variables:
        - label: 歌词信息
          max_length: 500000
          options: []
          required: true
          type: paragraph
          variable: lyrics_array
        - label: 美术风格
          max_length: 255
          options: []
          required: false
          type: text-input
          variable: style
        - label: 音乐风格
          max_length: 5000
          options: []
          required: true
          type: paragraph
          variable: music_style
        - label: 音乐url
          max_length: 50000
          options: []
          required: true
          type: paragraph
          variable: music_url
        - label: music_duration
          max_length: 48
          options: []
          required: true
          type: number
          variable: music_duration
        - default: 否
          label: 是否需要字幕
          max_length: 48
          options:
          - 是
          - 否
          required: true
          type: select
          variable: inline_subtitle
        - label: 古诗词原文
          max_length: 5000
          options: []
          required: true
          type: paragraph
          variable: poem_content
        - default: 否
          label: 是否喵星人形象
          max_length: 48
          options:
          - 是
          - 否
          required: true
          type: select
          variable: is_mxr
        - default: 横屏
          label: 横竖屏
          max_length: 48
          options:
          - 横屏
          - 竖屏
          required: true
          type: select
          variable: aspect
        - label: 歌词结构
          max_length: 500000
          options: []
          required: true
          type: paragraph
          variable: lyrics_structure
        - label: 日志上报ID
          max_length: 256
          options: []
          required: false
          type: text-input
          variable: ai_course_log_id
      height: 350
      id: '1775575463958'
      position:
        x: 30
        y: 469
      positionAbsolute:
        x: 30
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        author: 陈胜-海豚赫兹
        desc: ''
        height: 451
        selected: false
        showAuthor: true
        text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"lyrics_array:
          [","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"   {","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"start\":
          \"开始秒数\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"end\":
          \"结束秒数\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"lyrics\":
          \"歌词\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"    },","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"   {","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"start\":
          \"开始秒数\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"end\":
          \"结束秒数\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"lyrics\":
          \"歌词\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"    },","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"   {","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"start\":
          \"开始秒数\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"end\":
          \"结束秒数\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"        \"lyrics\":
          \"歌词\",","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"    },","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":".........","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"]","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"根据这个array,生成若干对应歌词的以及时长的视频,最后按顺序拼到一起","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"要保证人物、画风一致性","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0,"textStyle":""}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}'
        theme: blue
        title: ''
        type: ''
        width: 462
      height: 451
      id: '1775575667046'
      position:
        x: -442.46600018334874
        y: 839
      positionAbsolute:
        x: -442.46600018334874
        y: 839
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom-note
      width: 462
    - data:
        desc: ''
        outputs:
        - value_selector:
          - '1775804956739'
          - video_url
          value_type: string
          variable: web_result
        selected: false
        title: 结束
        type: end
      height: 90
      id: '1775575749620'
      position:
        x: 10921.505404224032
        y: 469
      positionAbsolute:
        x: 10921.505404224032
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_handle_mode: continue-on-error
        height: 957.7131878808834
        is_parallel: true
        iterator_input_type: object
        iterator_selector:
        - '1776687137943'
        - structured_output
        - 分镜
        output_selector:
        - '1775594043410'
        - info
        output_type: array[object]
        parallel_nums: 3
        selected: false
        start_node_id: 1775586681775start
        title: 遍历
        type: iteration
        width: 1933
      height: 958
      id: '1775586681775'
      position:
        x: 7306.401789656891
        y: 469
      positionAbsolute:
        x: 7306.401789656891
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 1933
      zIndex: 1
    - data:
        desc: ''
        is_team_authorization: true
        output_schema: null
        outputs:
        - type: string
          value_selector:
          - '1772247045745'
          - video_url
          value_type: string
          variable: video_url
        - type: string
          value_selector:
          - '1772247045745'
          - vid
          value_type: string
          variable: vid
        - type: object
          value_selector:
          - '1775631718976'
          - result
          value_type: object
          variable: web_result
        paramSchemas:
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: video_params
            ja_JP: video_params
            pt_BR: video_params
            zh_Hans: video_params
          llm_description: ''
          max: null
          min: null
          name: video_params
          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: audio_params
            ja_JP: audio_params
            pt_BR: audio_params
            zh_Hans: audio_params
          llm_description: ''
          max: null
          min: null
          name: audio_params
          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: subtitle_params
            ja_JP: subtitle_params
            pt_BR: subtitle_params
            zh_Hans: subtitle_params
          llm_description: ''
          max: null
          min: null
          name: subtitle_params
          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: 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: 视频高
            ja_JP: 视频高
            pt_BR: 视频高
            zh_Hans: 视频高
          llm_description: ''
          max: null
          min: null
          name: height
          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: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 是否输出web剪辑工程
            ja_JP: 是否输出web剪辑工程
            pt_BR: 是否输出web剪辑工程
            zh_Hans: 是否输出web剪辑工程
          llm_description: ''
          max: null
          min: null
          name: is_web_project
          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_params: ''
          height: ''
          is_web_project: ''
          subtitle_params: ''
          video_params: ''
          width: ''
        provider_id: e5d9c6cd-a06f-4b0f-9d42-09fa0f79b13b
        provider_name: 火山视频点播-视频合成
        provider_type: workflow
        selected: false
        title: 火山视频点播-视频合成
        tool_configurations: {}
        tool_description: 使用火山引擎的视频点播功能,拼接视频,音频,添加字幕
        tool_label: 火山视频点播-视频合成
        tool_name: volc_diaobo_videoconcat
        tool_node_version: '2'
        tool_parameters:
          audio_params:
            type: mixed
            value: '{{#1775806793494.audio_params#}}'
          height:
            type: variable
            value:
            - '1775806793494'
            - height
          is_web_project:
            type: constant
            value: 是
          subtitle_params:
            type: mixed
            value: '{{#1775806793494.subtitle_params#}}'
          video_params:
            type: mixed
            value: '{{#1775806793494.video_params#}}'
          width:
            type: variable
            value:
            - '1775806793494'
            - width
        type: tool
      height: 94
      id: '1775804956739'
      position:
        x: 10567.389307322044
        y: 469
      positionAbsolute:
        x: 10567.389307322044
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({info, music_url, duration, subtitle, inline_subtitle,\
          \ aspect}) {\n    const MULTIPLIER = 1000000;\n\n    return {\n        video_params:\
          \ JSON.stringify(info.filter(Boolean).map(i => ({\n            ...i,\n \
          \           start: i.start * MULTIPLIER,\n            end: i.end * MULTIPLIER,\n\
          \            duration: i.duration * MULTIPLIER,\n            transition:\
          \ \"淡入淡出\",\n            transition_duration: 0.5 * MULTIPLIER,\n      \
          \      volume: 0.3\n        }))),\n        audio_params: JSON.stringify([{\n\
          \            audio_url: music_url,\n            start: 0,\n            end:\
          \ duration * MULTIPLIER,\n            duration: duration * MULTIPLIER,\n\
          \        }]),\n        subtitle_params: (inline_subtitle == '否' || aspect\
          \ === '竖屏') ? '[]':  JSON.stringify(subtitle.filter(s => !!s.text).map(s\
          \ => ({\n            start: s.start * MULTIPLIER,\n            end: s.end\
          \ * MULTIPLIER,\n            text: s.text,\n        }))),\n        width:\
          \ aspect == '竖屏' ? 1080 : 1920,\n        height: aspect == '竖屏' ? 1920 :\
          \ 1080,\n    }\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          audio_params:
            children: null
            type: string
          height:
            children: null
            type: number
          subtitle_params:
            children: null
            type: string
          video_params:
            children: null
            type: string
          width:
            children: null
            type: number
        selected: false
        title: video_param
        type: code
        variables:
        - value_selector:
          - '1775586681775'
          - output
          value_type: array[object]
          variable: info
        - value_selector:
          - '1775575463958'
          - music_url
          value_type: string
          variable: music_url
        - value_selector:
          - '1775575463958'
          - music_duration
          value_type: number
          variable: duration
        - value_selector:
          - '1776124924070'
          - caption_infos
          value_type: array[object]
          variable: subtitle
        - value_selector:
          - '1775575463958'
          - inline_subtitle
          value_type: string
          variable: inline_subtitle
        - value_selector:
          - '1775575463958'
          - aspect
          value_type: string
          variable: aspect
      height: 54
      id: '1775806793494'
      position:
        x: 10138.553219080984
        y: 469
      positionAbsolute:
        x: 10138.553219080984
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        audio:
          configs:
            variable_selector:
            - sys
            - files
          enabled: false
        context:
          enabled: false
          variable_selector: []
        desc: ''
        document:
          configs:
            variable_selector: []
          enabled: false
        model:
          completion_params:
            temperature: 0.6
          mode: chat
          name: gemini-3.1-pro-preview
          provider: aict/ai_hub/ai_hub
        prompt_template:
        - id: a57f4a66-3e16-4660-a018-bc91afd4e382
          role: system
          text: "你是一位专业的古诗词教学MV导演兼编剧。你精通中国古典文学,同时具备成熟的影视叙事能力。你的工作是将诗词内容转化为忠实原文、画面优美、叙事连贯的MV剧本,让观众通过画面直观理解诗词含义。\n\
            \n你将接收三项核心输入:\n1. 诗词内容与相关信息(朝代、作者、美术风格等)\n2. 音乐风格(如古风、摇滚、民谣、电子、流行等)\n\
            3. 音乐能量分析数据(包含各段落的时间范围、能量类型和描述)\n\n音乐能量分析数据格式示例:\n[\n  { \"start\": 0,\
            \ \"end\": 15, \"description\": \"前奏部分,...\", \"type\": \"低能量\" },\n \
            \ { \"start\": 15, \"end\": 45, \"description\": \"主歌段落,...\", \"type\"\
            : \"低能量\" },\n  ...\n]\n\n核心创作原则(优先级从高到低):\n1. 忠实于诗词原文内容——每个画面段落必须对应诗句的具体意象和含义,观众看完MV后能理解这首诗在讲什么\n\
            2. 剧情情绪节奏必须与音乐能量分析严格同步——低能量段落对应安静内敛的画面叙事,高能量段落对应情感释放的视觉高潮,爆发段落对应全片最强烈的视觉冲击\n\
            3. 画面的视觉气质必须与音乐风格匹配——不同音乐风格决定了画面的整体调性、镜头运动风格、剪辑节奏和视觉表达方式\n4. 在忠实原文的基础上,用叙事手法将各句画面串联为连贯的视觉故事,而非孤立的图片幻灯片\n\
            5. 人物身份、处境、情感状态必须与诗词作者/主人公的真实语境一致\n6. 所有环境、服饰、器物、礼仪严格符合诗词所属朝代\n\n音乐风格与画面气质对应规则:\n\
            \n古风/国风:\n- 画面质感:水墨晕染感、留白构图、工笔细节、自然光影\n- 镜头风格:长镜头为主,运镜如卷轴展开般舒缓,多用横移和缓推\n\
            - 剪辑节奏:慢节奏为基调,转场如翻页、墨染过渡、烟雾弥散\n- 色彩倾向:淡雅水墨色系、矿物质颜料色感,低饱和度为主\n- 表演风格:含蓄内敛,以眼神和微表情传达情感,动作优雅克制\n\
            \n民谣/抒情:\n- 画面质感:胶片颗粒感、自然柔光、温暖色调、生活化质感\n- 镜头风格:手持微晃增加亲近感,大量特写捕捉细节情绪,浅景深虚化\n\
            - 剪辑节奏:舒缓流畅,以叠化和淡入淡出为主要转场方式\n- 色彩倾向:暖色调为主,秋日金黄、黄昏橘红、月光银蓝\n- 表演风格:自然真实,如同被偷拍的生活瞬间,情感外露但不夸张\n\
            \n摇滚/力量型:\n- 画面质感:高对比度、硬光影、粗粝质感、强烈明暗对比\n- 镜头风格:快速运动镜头、甩镜、急推急拉,低角度仰拍增强力量感\n\
            - 剪辑节奏:快切为主,节奏跟随鼓点,高能量段落可达每秒2-3个镜头切换\n- 色彩倾向:高对比、深色调为底色,爆发时用强烈的光线穿透暗部\n\
            - 表演风格:情感外放,动作幅度大,允许夸张化的情绪表达\n\n电子/现代:\n- 画面质感:冷调光影、几何构图、超现实元素、光效丰富\n\
            - 镜头风格:稳定器运动、环绕镜头、非常规角度、延时/升格交替\n- 剪辑节奏:精准卡拍,drop段落硬切与beat完全同步,build up段落逐帧加速\n\
            - 色彩倾向:霓虹冷色、赛博蓝紫,或极简黑白配合单色点缀\n- 表演风格:风格化、符号化,动作可带有舞蹈感或仪式感\n\n流行/通用:\n\
            - 画面质感:干净明亮、精致构图、商业级光影、色彩饱满\n- 镜头风格:稳定流畅,推拉摇移均衡使用,注重画面美感\n- 剪辑节奏:中等节奏,副歌加快,主歌舒缓,整体平衡\n\
            - 色彩倾向:根据诗词情感选择——欢快用暖亮色,忧伤用冷灰调\n- 表演风格:自然但精致,兼顾情感表达和画面美观\n\n戏腔/京剧/戏曲风:\n\
            - 画面质感:舞台感与实景结合、浓墨重彩、程式化构图\n- 镜头风格:正面对称构图为主,关键身段用慢动作呈现,亮相时定格\n- 剪辑节奏:跟随锣鼓点,紧拉慢唱时镜头节奏对应变化\n\
            - 色彩倾向:戏曲脸谱色系、大红大绿大金、黑底衬托\n- 表演风格:允许适度程式化动作(水袖、兰花指、台步),但不脱离诗词叙事\n\n若音乐风格不在以上列表中,根据该风格的核心听觉特征(节奏快慢、音色软硬、情感浓淡)推导对应的视觉气质,遵循\"\
            听觉体验转化为视觉体验\"的原则。\n\n音乐结构与剧情节奏的对应规则:\n- 前奏(低能量)→ 环境铺陈,建立时空背景,镜头缓慢推进,以空镜或远景为主\n\
            - 主歌(低能量/中能量)→ 叙事展开,人物出场,动作舒缓,情感克制内敛,以中景和近景交替呈现细节\n- 预副歌/能量上升 → 情绪蓄积,画面节奏加快,镜头运动加速,暗示即将到来的情感转折\n\
            - 副歌(高能量)→ 情感释放,核心情绪的视觉化高潮,可使用大景别切换、快速蒙太奇、特写强化表情\n- 爆发 → 全片视觉最高潮,最强烈的画面冲击,可用极端景别对比、慢动作、光影剧变等手法\n\
            - 桥段/间奏(中能量/能量下降)→ 情绪转折或回忆闪回,提供叙事喘息空间,可切换时空或视角\n- 尾奏(能量下降)→ 情感沉淀,画面归于平静,以远景或空镜收束,留白余韵\n\
            \n注意:以上是通用规则,具体的镜头手法和剪辑方式必须在音乐风格对应的视觉体系内执行。例如同样是\"高能量副歌\":\n- 古风中表现为:镜头拉远至全景,展现壮阔山河,人物衣袂飘扬,长镜头内完成情感释放\n\
            - 摇滚中表现为:快速切换多角度特写,强烈光影闪烁,镜头跟随人物激烈动作\n- 民谣中表现为:持续的面部特写,泪光或微笑的细腻捕捉,浅景深中背景虚化流动\n\
            \n创作流程:\n\n第一步:分析诗词\n- 确定诗词朝代、作者身份、创作背景,后续所有视觉元素锁定该朝代\n- 逐句梳理诗词含义,明确每句的核心意象和情感\n\
            - 确定诗中主人公的身份(诗人本人、闺中女子、将士等),后续人物设定必须与此一致\n- 根据用户提供的美术风格确定画面调性\n\n第二步:确定音乐风格的视觉体系\n\
            - 根据输入的音乐风格,锁定本片的画面质感、镜头风格、剪辑节奏、色彩倾向和表演风格\n- 评估音乐风格与诗词朝代/内容之间的融合方式(例如:唐诗+摇滚=如何在保持朝代准确性的同时呈现摇滚的视觉力量感)\n\
            - 确定融合策略:服饰器物严格遵循朝代,镜头语言和剪辑节奏遵循音乐风格,两者不冲突\n\n第三步:将诗词内容映射到音乐结构\n- 根据音乐能量分析数据的时间段划分,将诗句分配到对应的音乐段落中\n\
            - 确认每个音乐段落的能量类型,据此确定该段落的画面情绪强度和节奏\n- 确保诗词的情感起伏与音乐能量曲线一致:诗中情感最强烈的句子应落在音乐的高能量或爆发段落\n\
            \n第四步:构建画面叙事\n- 以诗词原文为骨架,每个段落对应具体诗句,画面内容直接呈现该句描写的场景、动作、情感\n- 人物形象基于诗词语境设定(如诗中写\"\
            白发\"则人物须有白发特征,写\"少年\"则须年轻形象)\n- 在诗句之间寻找自然的叙事衔接——利用时间流逝、空间移动、视线转移等手法让画面过渡流畅\n\
            - 情绪曲线严格跟随音乐能量分析的type字段变化\n- 镜头语言和剪辑方式严格遵循已锁定的音乐风格视觉体系\n- 允许为叙事连贯性补充合理的过渡画面,但补充内容必须符合诗词整体语境,不得引入诗中未涉及的人物或事件\n\
            \n第五步:剧本写作规范\n对每个段落,按以下层次描写:\n\n【环境】诗句中描写或暗示的具体空间、光线、天气、季节(优先使用诗中原有意象),光影处理方式符合音乐风格的视觉体系\n\
            【人物】与诗词主人公一致的外貌、服饰、当前状态(服饰和形象必须有诗词文本或朝代考据依据)\n【动作与表演】人物的行为必须是诗句内容的视觉化呈现,表演强度与当前音乐能量类型匹配(低能量=动作轻缓克制;高能量=动作幅度大、表情强烈;爆发=最极致的情感外化),表演风格符合音乐风格设定\n\
            【镜头语言】景别、运镜方式、镜头节奏必须同时服务于当前音乐段落的能量状态和音乐风格的镜头体系\n【转场】如何过渡到下一段落的画面(必须有视觉或情绪上的衔接逻辑,转场方式符合音乐风格的剪辑特征)\n\
            \n写作要求:\n- 以连贯的叙事文本输出,不使用分点列表,不使用标题标记\n- 环境和人物描写具体细致,让读者能\"看见\"画面\n- 运镜和景别自然融入叙述中,不单独罗列\n\
            - 上下段落之间的衔接必须流畅自然\n- 剧本文本中不出现时间戳数字,但段落顺序和节奏必须与音乐能量分析的时间段一一对应\n\n第六步:自检\n\
            输出前确认:\n- 每个画面段落是否能让观众理解对应诗句的含义?(教学功能是否达成)\n- 人物形象和行为是否与诗词原文描述一致?是否存在与原文矛盾的设定?\n\
            - 转场是否自然?是否存在硬切或突兀跳转?\n- 画面是否既忠实于诗词又具有视觉叙事的流畅感?\n- 环境、服饰、器物是否严格符合对应朝代?\n\
            - 整体情绪节奏是否与音乐能量分析的各段落type严格同步?\n- 镜头语言、剪辑节奏、画面质感是否全程贯彻了音乐风格对应的视觉体系?是否存在风格不统一的段落?\n\
            - 音乐风格的视觉表达与朝代准确性之间是否存在冲突?如有,是否已通过\"服饰器物遵循朝代、镜头剪辑遵循风格\"的策略解决?\n- 剧本段落数量是否与音乐能量分析的段落数量对应?\n\
            \n输出格式:\n- 标准JSON格式,包含一个story字段\n- story的值为完整的MV剧本文本\n- 不包含任何xml标签、时间数据或JSON外的额外文字\n\
            - 确保JSON格式正确,引号和转义字符处理得当\n\n```json\n{\n  \"story\": \"\"\n}\n```\n\n"
        - id: 6d848b28-4d14-4c4b-849c-fe6b1f95fdd4
          role: user
          text: '歌词: {{#1775575463958.lyrics_array#}}

            叙事节奏:{{#1778240988065.result#}}

            诗词内容:{{#1775575463958.poem_content#}}

            音乐风格:{{#1775575463958.music_style#}}'
        retry_config:
          max_retries: 3
          retry_enabled: true
          retry_interval: 1000
        selected: false
        structured_output:
          schema:
            additionalProperties: false
            properties:
              story:
                type: string
            required:
            - story
            type: object
        structured_output_enabled: true
        title: 设计叙事
        type: llm
        variables: []
        video:
          configs:
            variable_selector: []
          enabled: false
        vision:
          enabled: false
      height: 152
      id: '1776060778449'
      position:
        x: 1974.0589169927455
        y: 469
      positionAbsolute:
        x: 1974.0589169927455
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "import re\n\ndef main(caption_infos_str: str, duration: float) -> dict:\n\
          \    caption_infos = json.loads(caption_infos_str)\n    \"\"\"\n    Dify\
          \ 节点逻辑:\n    1. 智能分段:超过 20 字,从后往前寻找标点切分。\n    2. 标点清洗:将标点替换为空格。\n    3.\
          \ 时长重构:完全忽略原始 Duration,改为【每秒 4 个字】计算时长。\n       - 1秒 = 1,000,000 微秒\n  \
          \     - 语速 4字/秒 -> 每个字符 250,000 微秒\n    \"\"\"\n    \n    # === 配置项 ===\n\
          \    MAX_LEN = 20\n    # 语速配置:每秒4个字\n    CHARS_PER_SEC = 4\n    # 计算每个字符占用的秒数\
          \ (1秒 = 1000000微秒)\n    US_PER_CHAR = (1 / CHARS_PER_SEC) # 250,000\n  \
          \  \n    # 标点定义\n    DELIMITERS = ['。', '!', '?', '…', ';', '!', '?', ';',\
          \ ',', '、', ',', ' ', '”', '’', ')', ')']\n    CLEAN_PATTERN = r\"[。!?…;!?;,、,\
          \ ”’\\\"'()$$$$$$【】《》—\\-]+\"\n    \n    processed_captions = []\n    first_start\
          \ = caption_infos[0].get('start', 0)\n    current_cursor = 0\n    while\
          \ current_cursor < first_start:\n        gap = min(first_start - current_cursor,\
          \ 14)\n        new_end = current_cursor + gap\n        new_item = {\n  \
          \          \"text\": \"\",\n            \"start\": current_cursor,\n   \
          \         \"end\": new_end,\n            \"duration\": gap\n        }\n\
          \        processed_captions.append(new_item)\n        current_cursor = new_end\n\
          \n\n    for item in caption_infos:\n        raw_text = item.get('lyrics',\
          \ '')\n        # 锚定当前片段的开始时间(第一段使用原始 Start,后续段落累加)\n        current_cursor\
          \ = item.get('start', 0)\n        \n        # === 步骤 1:文本切分逻辑 ===\n    \
          \    segments = []\n        \n        if len(raw_text) <= MAX_LEN:\n   \
          \         segments.append(raw_text)\n        else:\n            # 长文本处理:从后往前切分\n\
          \            remaining_text = raw_text\n            while len(remaining_text)\
          \ > MAX_LEN:\n                split_index = -1\n                found_delimiter\
          \ = False\n                \n                # 搜索窗口:从 MAX_LEN 处向前回溯\n  \
          \              search_end = MAX_LEN\n                search_start = max(1,\
          \ int(MAX_LEN * 0.4)) \n                \n                for i in range(search_end,\
          \ search_start, -1):\n                    if i < len(remaining_text) and\
          \ remaining_text[i-1] in DELIMITERS:\n                        split_index\
          \ = i\n                        found_delimiter = True\n                \
          \        break\n                \n                if not found_delimiter:\n\
          \                    split_index = MAX_LEN\n                \n         \
          \       segments.append(remaining_text[:split_index])\n                remaining_text\
          \ = remaining_text[split_index:]\n            \n            if remaining_text:\n\
          \                segments.append(remaining_text)\n        \n        # ===\
          \ 步骤 2:清洗文本 & 重算时长 ===\n        for seg_text in segments:\n            #\
          \ 清洗标点为 1 个空格\n            # 注意:这里的空格也会被计入字数,作为朗读时的停顿时间,这是合理的\n        \
          \    cleaned_text = re.sub(CLEAN_PATTERN, ' ', seg_text)\n            \n\
          \            # 计算字数 (包含空格)\n            char_count = len(cleaned_text)\n\
          \            \n            # 核心逻辑:根据字数计算时长\n            # 比如 \"嘿 \" (2字符)\
          \ -> 2 * 250000 = 500000 (0.5秒),不再是 4秒\n            # 最小给 1 个字符的时长,防止空字符串导致报错\n\
          \            calc_duration = max(char_count, 1) * US_PER_CHAR\n        \
          \    \n            new_end = current_cursor + calc_duration\n          \
          \  \n            new_item = {\n                \"text\": cleaned_text,\n\
          \                \"start\": current_cursor,\n                \"end\": new_end,\n\
          \                \"duration\": calc_duration\n            }\n          \
          \  processed_captions.append(new_item)\n            \n            # 更新游标,下一段紧接着这一段开始\n\
          \            current_cursor = new_end\n\n    while current_cursor < duration:\n\
          \        gap = min(duration - current_cursor, 14)\n        new_end = current_cursor\
          \ + gap\n        new_item = {\n            \"text\": \"\",\n           \
          \ \"start\": current_cursor,\n            \"end\": new_end,\n          \
          \  \"duration\": gap\n        }\n        processed_captions.append(new_item)\n\
          \        current_cursor = new_end\n\n    return {\n        \"caption_infos\"\
          : processed_captions,\n        \"caption_infos_str\": json.dumps(processed_captions,\
          \ ensure_ascii=False)\n    }"
        code_language: python3
        desc: ''
        outputs:
          caption_infos:
            children: null
            type: array[object]
          caption_infos_str:
            children: null
            type: string
        selected: false
        title: 分割歌词
        type: code
        variables:
        - value_selector:
          - '1775575463958'
          - lyrics_array
          value_type: string
          variable: caption_infos_str
        - value_selector:
          - '1775575463958'
          - music_duration
          value_type: number
          variable: duration
      height: 54
      id: '1776124924070'
      position:
        x: 2952.406291038393
        y: 330.17094513857546
      positionAbsolute:
        x: 2952.406291038393
        y: 330.17094513857546
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_handle_mode: continue-on-error
        height: 1062.9045831134008
        is_parallel: true
        iterator_input_type: object
        iterator_selector:
        - '1776687137943'
        - structured_output
        - 设定图
        output_selector:
        - '1776189738219'
        - output
        output_type: array[object]
        parallel_nums: 3
        selected: false
        start_node_id: 1776187568336start
        title: 生成人物参考图
        type: iteration
        width: 2278
      height: 1063
      id: '1776187568336'
      position:
        x: 4235.594311888455
        y: 600.1255410053692
      positionAbsolute:
        x: 4235.594311888455
        y: 600.1255410053692
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 2278
      zIndex: 1
    - 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: gemini-3.1-pro-preview
          provider: aict/ai_hub/ai_hub
        prompt_template:
        - id: 2a9f253a-aecc-4ad1-b77d-2ce01cb95a26
          role: system
          text: "你是一位专业的古诗词教学MV导演兼编剧。你精通中国古典文学,同时具备成熟的影视叙事能力。你的工作是将诗词内容转化为忠实原文、画面优美、叙事连贯的MV剧本,让观众通过画面直观理解诗词含义。\n\
            \n你将接收三项核心输入:\n1. 诗词内容与相关信息(朝代、作者、美术风格等)\n2. 音乐风格(如古风、摇滚、民谣、电子、流行等)\n\
            3. 音乐能量分析数据(包含各段落的时间范围、能量类型和描述)\n\n音乐能量分析数据格式示例:\n[\n      {\n       \
            \ \"start\": 0,\n        \"end\": 18,\n        \"description\": \"歌曲开头失真电吉他与中国大鼓直接切入,不作冗长铺垫,建立起磅礴的史诗感与新金属摇滚基调,为即将加入的人声迅速蓄力\"\
            ,\n        \"type\": \"能量上升\"\n      },\n      {\n        \"start\": 18,\n\
            \        \"end\": 24,\n        \"description\": \"主歌部分,青年男声以摇滚唱腔强势进入,人声充满力量,在重型节拍下保持了极强的穿透力与节奏感,奠定全曲硬核基调\"\
            ,\n        \"type\": \"中能量\"\n      },\n      {\n        \"start\": 24,\n\
            \        \"end\": 35,\n        \"description\": \"第一次副歌,808鼓机与失真古筝音色交织碰撞,男声展现极强爆发力,演唱节奏拉宽,情绪迅速燃向高能,国风与重型摇滚完美结合\"\
            ,\n        \"type\": \"高能量\"\n      },\n      {\n        \"start\": 35,\n\
            \        \"end\": 50,\n        \"description\": \"Rap说唱段落,节奏变得更加紧凑强劲,加入水流采样与失真和声,人声律动感十足,在维持动感的同时为最终高潮进行情绪铺垫\"\
            ,\n        \"type\": \"铺垫\"\n      },\n      {\n        \"start\": 50,\n\
            \        \"end\": 70,\n        \"description\": \"最终副歌,情绪推至全曲最高峰,所有乐器全开,重低音与轰鸣感填满全频段,男声飙出具有撕裂感的摇滚高音,能量彻底释放\"\
            ,\n        \"type\": \"爆发\"\n      },\n      {\n        \"start\": 70,\n\
            \        \"end\": 103,\n        \"description\": \"尾奏段落,伴随电吉他滑弦的余音与中国大鼓的重击,狂暴的乐器轰炸戛然而止,留下长长的空间混响,整体能量迅速抽离并消散\"\
            ,\n        \"type\": \"能量下降\"\n      },\n      {\n        \"start\": 103,\n\
            \        \"end\": 105,\n        \"description\": \"全曲结尾,以极度收敛的低语唱出最后一句歌词,与前段的史诗级爆发形成巨大听觉反差,情绪彻底归于冷峻与平静\"\
            ,\n        \"type\": \"低能量\"\n      }\n    ]\n\n核心创作原则(优先级从高到低):\n1. 忠实于诗词原文内容——每个画面段落必须对应诗句的具体意象和含义,观众看完MV后能理解这首诗在讲什么\n\
            2. 剧情情绪节奏必须与音乐能量分析严格同步——低能量段落对应安静内敛的画面叙事,高能量段落对应情感释放的视觉高潮,爆发段落对应全片最强烈的视觉冲击\n\
            3. 画面的视觉气质必须与音乐风格匹配——不同音乐风格决定了画面的整体调性、镜头运动风格、剪辑节奏和视觉表达方式\n4. 在忠实原文的基础上,用叙事手法将各句画面串联为连贯的视觉故事,而非孤立的图片幻灯片\n\
            5. 人物身份、处境、情感状态必须与诗词作者/主人公的真实语境一致\n6. 所有环境、服饰、器物、礼仪严格符合诗词所属朝代\n\n【分镜时长硬性约束——强制执行】\n\
            \n每个分镜的时长(\"结束\"减\"开始\")必须满足:\n- 最短不低于4秒\n- 最长不超过14秒\n- 不允许出现任何例外\n\n\
            当音乐能量分析中某个段落的时长超过14秒时,必须将该段落拆分为多个分镜,每个分镜4-14秒。拆分规则见下方\"分镜拆解决策流程\"。\n当音乐能量分析中某个段落的时长短于4秒时,该段落整体作为一个分镜,不再细分。\n\
            \n【分镜拆解决策流程——基于能量类型的景别·运镜·情绪·节奏决策】\n\n这是分镜设计的核心决策环节。对音乐能量分析中的每个段落,必须按以下流程执行:\n\
            \n第一步:读取能量类型,确定该段落的视觉基调\n\n| 能量类型 | 视觉情绪基调 | 景别倾向 | 运镜速度 | 剪辑密度 | 单镜头时长倾向\
            \ |\n|---------|------------|---------|---------|---------|-------------|\n\
            | 低能量 | 静谧、内省、孤寂、沉思 | 远景/全景为主,偶尔切特写细节 | 极缓(几乎静止的推移) | 低(长镜头为主) | 8-14秒\
            \ |\n| 能量上升 | 期待、酝酿、暗涌、渐强 | 由远及近渐进推进 | 从缓到中速渐加 | 中低→中(逐渐加密) | 6-12秒 |\n\
            | 中能量 | 叙述、从容、铺陈、展开 | 中景/近景为主,交替切换 | 中速稳定 | 中等(正常叙事节奏) | 6-10秒 |\n| 铺垫\
            \ | 压抑、蓄势、紧迫、暗流 | 近景/特写为主,压缩空间感 | 中速偏快,带有方向性推进 | 中高(节奏感加强) | 5-8秒 |\n\
            | 高能量 | 激昂、释放、壮阔、奔涌 | 大景别跳切(远景↔特写交替) | 快速运镜,跟随动作 | 高(快切、蒙太奇) | 4-7秒 |\n\
            | 爆发 | 极致、撕裂、震撼、巅峰 | 极端对比(大全景↔大特写瞬切) | 急推急拉/甩镜/瞬间静止 | 极高或极低(极快切或升格慢动作)\
            \ | 4-6秒 |\n| 能量下降 | 余韵、消散、释然、归寂 | 由近渐远拉开,回归远景/空镜 | 从中速渐缓至极缓 | 由中渐低(镜头逐渐拉长)\
            \ | 8-14秒 |\n\n第二步:计算段落总时长,判断是否需要拆分\n\n- 段落总时长 = end - start\n- 若总时长 ≤\
            \ 14秒:整段作为一个分镜,直接应用上表的视觉基调\n- 若总时长 > 14秒:必须拆分,进入第三步\n\n第三步:拆分策略(当段落时长\
            \ > 14秒时执行)\n\n拆分原则:\na) 每个子分镜时长控制在4-14秒\nb) 拆分点必须有叙事逻辑(不可在动作/句意中间硬切),优先在以下位置拆分:\n\
            \   - 诗句之间的自然断句处\n   - 歌词换气/乐句间隙处\n   - 景别自然切换处(如从人物切到环境)\n   - 动作完成点(一个完整动作结束时)\n\
            c) 拆分后的子分镜之间应有情绪递进或视角变化,不可重复相同的景别和运镜\n\n拆分后的能量继承规则:\n- \"低能量\"段落拆分:各子分镜维持统一的低能量基调,通过景别变化(远景→特写→远景)制造视觉层次\n\
            - \"能量上升\"段落拆分:子分镜按时间顺序呈现渐强趋势——前段更静、后段更动,景别逐渐推近,运镜速度递增\n- \"中能量\"段落拆分:各子分镜保持均衡的叙事节奏,通过不同角度/主体交替保持新鲜感\n\
            - \"铺垫\"段落拆分:子分镜呈现逐步收紧的压迫感——空间逐渐压缩(远→近→特写),运镜带有方向性暗示\n- \"高能量\"段落拆分:各子分镜均保持高强度,通过不同景别角度的快速交替维持能量水平\n\
            - \"爆发\"段落拆分:将爆发点精确定位在某一子分镜,其前为最后蓄力(急速推进),其后为爆发余波(升格/定格)\n- \"能量下降\"段落拆分:子分镜按时间顺序呈现递减趋势——前段仍有余力,后段归于沉寂,景别逐渐拉远\n\
            \n第四步:为每个分镜(或子分镜)确定具体的镜头方案\n\n基于第一步确定的视觉基调,为每个分镜选定:\na) 起始景别 → 结束景别(镜头内的景别变化方向)\n\
            b) 运镜方式(推/拉/摇/移/升/降/环绕/跟随/固定+缓推)\nc) 运镜速度(用具体描述:如\"3秒内从全景推至中景\"而非\"缓慢推进\"\
            )\nd) 画面情绪关键词(2-3个词精确定义该镜头的情绪)\ne) 与前后镜头的衔接方式(顺接/叠化/硬切/匹配剪辑/动作衔接)\n\n\
            第五步:验证节奏曲线\n\n完成所有分镜拆解后,按时间顺序检查整体节奏曲线:\n- 相邻分镜之间是否有足够的视觉变化(不可连续3个以上分镜使用相同景别和运镜方式)\n\
            - 能量转折点(如从\"铺垫\"到\"爆发\")处是否有明显的视觉跳变(景别突变、运镜速度突变、色调突变等)\n- 全片是否存在节奏单调的区间(连续超过20秒使用相同的剪辑密度)\n\
            \n【时长填满规则——禁止画面停滞】\n\n这是一条强制性规则,优先级等同于核心创作原则第2条,必须在所有分镜设计中严格执行:\n\n规则定义:每个分镜的\"\
            总时长\"(即\"结束\"减\"开始\"的秒数)内,必须有连续的、可感知的视觉变化贯穿始终。绝对不允许出现\"一个静止画面等待下一个分镜开始\"\
            的情况。\n\n判断标准:如果将分镜的任意连续2秒截取出来,画面中必须至少存在以下一种可感知的变化:\n- 镜头运动(推/拉/摇/移/升/降/环绕)\n\
            - 人物动作(肢体移动、表情变化、视线转移、呼吸起伏等)\n- 环境动态(风吹草动、水波流动、光影变化、云动、烟雾飘散、花瓣飘落等)\n-\
            \ 景别变化(由远及近或由近及远的连续变化)\n\n执行方法:\n\n第一步——计算时长:拿到每个分镜的时间段后,先计算总时长(结束时间 -\
            \ 开始时间 = 总时长秒数)。\n\n第二步——动作密度规划:根据总时长和能量类型共同决定视觉事件的密度和强度:\n\n| 总时长 | 低能量/能量下降\
            \ | 中能量/能量上升 | 高能量/铺垫/爆发 |\n|--------|---------------|---------------|----------------|\n\
            | 4-6秒 | 1-2个缓慢连续动作 | 2-3个中速动作 | 3-4个快速动作或1个爆发性动作+升格 |\n| 7-10秒 | 2-3个缓慢动作+环境微动\
            \ | 3-4个动作阶段+运镜变化 | 4-6个快速动作或多角度快切 |\n| 11-14秒 | 3-4个缓慢动作阶段+光影渐变 | 4-5个动作阶段+景别切换\
            \ | 不应出现(高能量段落应拆分为更短的分镜) |\n\n第三步——时间轴验证:在\"动作绝对时间轴\"字段中,所有时间区间必须首尾相接、无缝覆盖从\"\
            开始\"到\"结束\"的完整时长。不允许出现时间空隙。具体检查方式:\n- 第一个时间区间的起点必须等于该分镜的\"开始\"时间\n- 最后一个时间区间的终点必须等于该分镜的\"\
            结束\"时间\n- 相邻时间区间之间不得有间隔(前一个的终点 = 后一个的起点)\n- 每个时间区间内必须描述该时段内正在发生的具体动态(不可写\"\
            保持静止\"\"维持不变\"等无变化描述)\n\n第四步——静止画面的替代方案:当诗词内容本身暗示静态场景(如\"独坐\"\"静望\")时,不可让画面真正静止,而是通过以下手法制造视觉流动感:\n\
            - 用缓慢运镜代替静止机位(如从侧面缓缓横移环绕静坐的人物)\n- 用环境微动填充画面(风拂衣袂、烛火摇曳、水面微波、尘埃光柱浮动)\n-\
            \ 用光影渐变暗示时间流逝(光线角度缓慢偏移、阴影缓慢延伸)\n- 用景深变化引导视线(前景虚化渐实、或背景由实转虚)\n- 用特写切入细节(手指微动、睫毛颤动、墨渍缓慢晕开)\n\
            \n第五步——视频提示词中的体现:在\"视频提示词\"字段中,必须将上述连续动态明确写入,用时间节点标注动作的起止,确保视频生成工具能据此产出全程有动态的画面。\n\
            \n违规示例(禁止出现):\n- \"书生端坐不动,保持阅读姿态\" ← 无视觉变化,违规\n- \"画面保持远景构图不变\" ← 无运镜无动态,违规\n\
            - 动作时间轴中出现 \"[4s-7s] 维持上一动作姿态\" ← 无新变化,违规\n\n合规示例:\n- \"书生端坐阅读,镜头从左侧缓慢横移环绕至正面,同时窗外光线随云层移动产生明暗交替,书生右手食指沿书卷边缘缓慢下滑\"\
            \ ← 运镜+环境动态+人物微动,合规\n- 动作时间轴中 \"[4s-7s] 镜头继续缓推,书生眼帘缓慢抬起,视线从书卷移向窗外,同时窗纱被微风轻拂向室内飘入画面右侧\"\
            \ ← 有运镜+眼神动作+环境动态,合规\n\n音乐风格与画面气质对应规则:\n\n古风/国风:\n- 画面质感:水墨晕染感、留白构图、工笔细节、自然光影\n\
            - 镜头风格:长镜头为主,运镜如卷轴展开般舒缓,多用横移和缓推\n- 剪辑节奏:慢节奏为基调,转场如翻页、墨染过渡、烟雾弥散\n- 色彩倾向:淡雅水墨色系、矿物质颜料色感,低饱和度为主\n\
            - 表演风格:含蓄内敛,以眼神和微表情传达情感,动作优雅克制\n\n民谣/抒情:\n- 画面质感:胶片颗粒感、自然柔光、温暖色调、生活化质感\n\
            - 镜头风格:手持微晃增加亲近感,大量特写捕捉细节情绪,浅景深虚化\n- 剪辑节奏:舒缓流畅,以叠化和淡入淡出为主要转场方式\n- 色彩倾向:暖色调为主,秋日金黄、黄昏橘红、月光银蓝\n\
            - 表演风格:自然真实,如同被偷拍的生活瞬间,情感外露但不夸张\n\n摇滚/力量型:\n- 画面质感:高对比度、硬光影、粗粝质感、强烈明暗对比\n\
            - 镜头风格:快速运动镜头、甩镜、急推急拉,低角度仰拍增强力量感\n- 剪辑节奏:快切为主,节奏跟随鼓点,高能量段落可达每秒2-3个镜头切换\n\
            - 色彩倾向:高对比、深色调为底色,爆发时用强烈的光线穿透暗部\n- 表演风格:情感外放,动作幅度大,允许夸张化的情绪表达\n\n电子/现代:\n\
            - 画面质感:冷调光影、几何构图、超现实元素、光效丰富\n- 镜头风格:稳定器运动、环绕镜头、非常规角度、延时/升格交替\n- 剪辑节奏:精准卡拍,drop段落硬切与beat完全同步,build\
            \ up段落逐帧加速\n- 色彩倾向:霓虹冷色、赛博蓝紫,或极简黑白配合单色点缀\n- 表演风格:风格化、符号化,动作可带有舞蹈感或仪式感\n\
            \n流行/通用:\n- 画面质感:干净明亮、精致构图、商业级光影、色彩饱满\n- 镜头风格:稳定流畅,推拉摇移均衡使用,注重画面美感\n-\
            \ 剪辑节奏:中等节奏,副歌加快,主歌舒缓,整体平衡\n- 色彩倾向:根据诗词情感选择——欢快用暖亮色,忧伤用冷灰调\n- 表演风格:自然但精致,兼顾情感表达和画面美观\n\
            \n戏腔/京剧/戏曲风:\n- 画面质感:舞台感与实景结合、浓墨重彩、程式化构图\n- 镜头风格:正面对称构图为主,关键身段用慢动作呈现,亮相时定格\n\
            - 剪辑节奏:跟随锣鼓点,紧拉慢唱时镜头节奏对应变化\n- 色彩倾向:戏曲脸谱色系、大红大绿大金、黑底衬托\n- 表演风格:允许适度程式化动作(水袖、兰花指、台步),但不脱离诗词叙事\n\
            \n若音乐风格不在以上列表中,根据该风格的核心听觉特征(节奏快慢、音色软硬、情感浓淡)推导对应的视觉气质,遵循\"听觉体验转化为视觉体验\"\
            的原则。\n\n音乐结构与剧情节奏的对应规则:\n- 前奏(低能量)→ 环境铺陈,建立时空背景,镜头缓慢推进,以空镜或远景为主\n- 主歌(低能量/中能量)→\
            \ 叙事展开,人物出场,动作舒缓,情感克制内敛,以中景和近景交替呈现细节\n- 预副歌/能量上升 → 情绪蓄积,画面节奏加快,镜头运动加速,暗示即将到来的情感转折\n\
            - 副歌(高能量)→ 情感释放,核心情绪的视觉化高潮,可使用大景别切换、快速蒙太奇、特写强化表情\n- 爆发 → 全片视觉最高潮,最强烈的画面冲击,可用极端景别对比、慢动作、光影剧变等手法\n\
            - 桥段/间奏(中能量/能量下降)→ 情绪转折或回忆闪回,提供叙事喘息空间,可切换时空或视角\n- 尾奏(能量下降)→ 情感沉淀,画面归于平静,以远景或空镜收束,留白余韵\n\
            \n注意:以上是通用规则,具体的镜头手法和剪辑方式必须在音乐风格对应的视觉体系内执行。例如同样是\"高能量副歌\":\n- 古风中表现为:镜头拉远至全景,展现壮阔山河,人物衣袂飘扬,长镜头内完成情感释放\n\
            - 摇滚中表现为:快速切换多角度特写,强烈光影闪烁,镜头跟随人物激烈动作\n- 民谣中表现为:持续的面部特写,泪光或微笑的细腻捕捉,浅景深中背景虚化流动\n\
            \n创作流程:\n\n第一步:分析诗词\n- 确定诗词朝代、作者身份、创作背景,后续所有视觉元素锁定该朝代\n- 逐句梳理诗词含义,明确每句的核心意象和情感\n\
            - 确定诗中主人公的身份(诗人本人、闺中女子、将士等),后续人物设定必须与此一致\n- 根据用户提供的美术风格确定画面调性\n\n第二步:确定音乐风格的视觉体系\n\
            - 根据输入的音乐风格,锁定本片的画面质感、镜头风格、剪辑节奏、色彩倾向和表演风格\n- 评估音乐风格与诗词朝代/内容之间的融合方式(例如:唐诗+摇滚=如何在保持朝代准确性的同时呈现摇滚的视觉力量感)\n\
            - 确定融合策略:服饰器物严格遵循朝代,镜头语言和剪辑节奏遵循音乐风格,两者不冲突\n\n第三步:将诗词内容映射到音乐结构——执行分镜拆解决策流程\n\
            - 逐段读取音乐能量分析数据,执行\"分镜拆解决策流程\"的完整五步\n- 将诗句按语义单元分配到对应的音乐段落中,确保诗词情感最强烈的句子落在音乐的高能量或爆发段落\n\
            - 对每个音乐段落,根据其能量类型确定景别倾向、运镜速度、剪辑密度\n- 超过14秒的段落按拆分策略切分为4-14秒的子分镜,并应用能量继承规则\n\
            - 完成全部拆分后,执行节奏曲线验证\n\n第四步:构建画面叙事\n- 以诗词原文为骨架,每个段落对应具体诗句,画面内容直接呈现该句描写的场景、动作、情感\n\
            - 人物形象基于诗词语境设定(如诗中写\"白发\"则人物须有白发特征,写\"少年\"则须年轻形象)\n- 在诗句之间寻找自然的叙事衔接——利用时间流逝、空间移动、视线转移等手法让画面过渡流畅\n\
            - 情绪曲线严格跟随音乐能量分析的type字段变化\n- 镜头语言和剪辑方式严格遵循已锁定的音乐风格视觉体系\n- 允许为叙事连贯性补充合理的过渡画面,但补充内容必须符合诗词整体语境,不得引入诗中未涉及的人物或事件\n\
            - 【强制】每个分镜的视觉动态必须完整填满其分配到的时间段,执行\"时长填满规则\"\n\n第五步:剧本写作规范\n对每个段落,按以下层次描写:\n\
            \n【环境】诗句中描写或暗示的具体空间、光线、天气、季节(优先使用诗中原有意象),光影处理方式符合音乐风格的视觉体系\n【人物】与诗词主人公一致的外貌、服饰、当前状态(服饰和形象必须有诗词文本或朝代考据依据)\n\
            【动作与表演】人物的行为必须是诗句内容的视觉化呈现,表演强度与当前音乐能量类型匹配(低能量=动作轻缓克制;高能量=动作幅度大、表情强烈;爆发=最极致的情感外化),表演风格符合音乐风格设定\n\
            【镜头语言】景别、运镜方式、镜头节奏必须同时服务于当前音乐段落的能量状态和音乐风格的镜头体系\n【转场】如何过渡到下一段落的画面(必须有视觉或情绪上的衔接逻辑,转场方式符合音乐风格的剪辑特征)\n\
            \n写作要求:\n- 以连贯的叙事文本输出,不使用分点列表,不使用标题标记\n- 环境和人物描写具体细致,让读者能\"看见\"画面\n- 运镜和景别自然融入叙述中,不单独罗列\n\
            - 上下段落之间的衔接必须流畅自然\n- 剧本文本中不出现时间戳数字,但段落顺序和节奏必须与音乐能量分析的时间段一一对应\n\n第六步:自检\n\
            输出前确认:\n- 每个画面段落是否能让观众理解对应诗句的含义?(教学功能是否达成)\n- 人物形象和行为是否与诗词原文描述一致?是否存在与原文矛盾的设定?\n\
            - 转场是否自然?是否存在硬切或突兀跳转?\n- 设定图中的content必须指定人物朝代, 并且朝代一定要符合诗词时代\n- 画面是否既忠实于诗词又具有视觉叙事的流畅感?\n\
            - 环境、服饰、器物是否严格符合对应朝代?\n- 整体情绪节奏是否与音乐能量分析的各段落type严格同步?\n- 镜头语言、剪辑节奏、画面质感是否全程贯彻了音乐风格对应的视觉体系?是否存在风格不统一的段落?\n\
            - 音乐风格的视觉表达与朝代准确性之间是否存在冲突?如有,是否已通过\"服饰器物遵循朝代、镜头剪辑遵循风格\"的策略解决?\n- 剧本段落数量是否与最终拆分后的分镜数量一致?\n\
            - 【强制自检】时长约束验证——逐个检查每个分镜的时长是否在4-14秒范围内,任何超出范围的分镜必须返回修改\n- 【强制自检】分镜拆解逻辑验证——检查每个分镜的景别、运镜、情绪是否与其所处的能量类型一致(参照\"\
            分镜拆解决策流程\"第一步的对应表)\n- 输出的分镜的视频提示词中一定要引用到设定图中的数据,具体为@【xxx】格式,其中,xxx对应设定图中的name\n\
            - 【强制自检】时长填满验证——逐个检查每个分镜的\"动作绝对时间轴\":\n  a) 第一个时间区间起点是否等于该分镜的\"开始\"时间?\n\
            \  b) 最后一个时间区间终点是否等于该分镜的\"结束\"时间?\n  c) 相邻区间是否首尾相接无间隔?\n  d) 每个区间内的描述是否包含具体的动态变化(非静止描述)?\n\
            \  e) 若任何一项不通过,必须返回修改该分镜直至全部通过\n\n## 输出JSON格式\n\n{\n  \"设定图\": [\n   \
            \ {\n      \"name\": \"江南庭院_设定图\",\n      \"content\": \"2D卡通Q版风格,场景设定图。半开放式江南庭院,纵深三层:前景为青石板铺就的地面,石缝间生有细碎苔藓,一只粗陶花盆斜倚墙角,盆中栽有半枯的菖蒲;中景为庭院主体空间,一株三人合抱的老海棠树占据画面中心偏左,树干纹理粗粝苍劲,枝头繁花压枝,花瓣呈渐变粉白色,树下置一方青石桌、两只鼓形石凳,石桌面有长年茶渍浸润的深色痕迹;远景为白墙黛瓦的院墙与半开的月洞门,墙头爬有薜荔藤蔓。主色调为灰白青(墙体·石材),辅色为黛青(瓦·藤蔓),点缀色为海棠粉(花朵)。光影为清晨侧光,从画面右侧45度角射入,色温偏暖黄,海棠树冠在地面投下大面积斑驳树影,光影交界处柔和过渡。叙事暗示:石桌上遗留一只青瓷茶盏,盏中茶水已凉透呈深褐色,旁边一卷竹简半展开以镇纸压住——暗示主人阅读中途被打断离去。整体情绪基调:静谧中带有一丝被中断的生活感,等待主人归来的庭院。\"\
            \n    },\n    {\n      \"name\": \"书生_设定图\",\n      \"content\": \"2D卡通Q版风格,角色设定图。青年男性,身形清瘦修长,头身比约1:5.5(Q版),体态挺拔但肩线微微内收(暗示内敛性格),标志性姿态为单手背于身后、另一手持书卷。面部:鹅蛋脸型,剑眉微挑但眉尾下压(英气中带温和),丹凤眼型、瞳色深棕近墨,鼻梁挺直,薄唇微抿呈若有所思的默认表情,肤色白皙偏暖(常年室内的书卷气)。发型:墨黑长发以一根素白发带松束于脑后,额前碎发自然垂落两鬓。服饰:内层为月白色交领中衣,领口微露锁骨线条;外层为烟青色直裾长袍,面料为细棉麻质地呈哑光肌理,袍身宽松但腰间以同色细布带束出利落线条,袖口宽大但内缝窄袖便于书写。配饰:腰间左侧悬一枚拇指大小的墨绿色旧玉佩,玉面已被摩挲出温润包浆(暗示长年随身之物、与故事中某段牵挂相关);右手中指与食指指尖常年沾有淡墨渍,已渗入指纹纹路无法洗净。色彩归属:烟青灰蓝色系——冷静、内敛、书卷气。叙事痕迹:袍子右袖口内侧有一处细密的缝补针脚,布色略新于袍身(暗示清贫自持但爱惜衣物);玉佩穗绳已磨损起毛但未更换(暗示对旧物的执念)。整体情绪基调:克制温润的青年文人,内心有未说出口的牵挂。\"\
            \n    }\n  ],\n  \"分镜\": [\n    {\n      \"镜号\": \"01\",\n      \"标题\"\
            : \"清晨书房静默\",\n      \"对应歌词\": {\"text\": \"日照香炉生紫烟 遥看瀑布挂前川 \", \"start\"\
            : 18, \"end\": 22.0, \"duration\": 4.0},\n      \"开始\": 0,\n      \"结束\"\
            : 7,\n      \"总时长\": 7,\n      \"能量决策\": {\n        \"所处能量类型\": \"低能量\"\
            ,\n        \"景别策略\": \"远景→中景缓推,符合低能量的'远景/全景为主'倾向\",\n        \"运镜策略\"\
            : \"极缓直线推进,7秒内完成一个景别层级过渡\",\n        \"情绪关键词\": \"静谧、内省、晨起\",\n      \
            \  \"剪辑密度\": \"低——单一长镜头,无切换\"\n      },\n      \"空间定位\": \"江南庭院·屋内书桌旁(全景至中景)\"\
            ,\n      \"转场入点\": \"黑场渐亮起,阳光从画面左上角缓慢射入\",\n      \"转场出点\": \"直接顺接至下一镜头\"\
            ,\n      \"视频提示词\": \"2D卡通Q版风格,无字幕。承接:黑场渐亮,清晨阳光从左上角透入,照亮静谧屋内。@【江南庭院_设定图】屋内书桌区域,阳光较设定图基准时刻更低平,光线从左侧窗口斜射入室内,在桌面形成狭长的暖黄色光带,桌上笔架、砚台、半展竹简均处于原始摆放位置未被触动,@【书生_设定图】位于画面右侧三分线处,面朝左侧书桌方向端坐于木椅上,双手平放桌面、左手覆于右手背上,脊背挺直但肩线略低于设定图基准(刚醒的松弛感),面部微微低垂注视桌面书卷,眉头平展、双唇自然闭合、眼帘半垂呈专注阅读状态,烟青色长袍整洁无褶皱,袖口自然垂落覆盖手腕。运镜:从全景匀速缓推至中景,正前方直线推进,速度极缓——7秒内从全景到达中景。光影:清晨暖黄色侧光,从左侧窗口射入,色温约3500K,在桌面形成明暗分界线,光线稳定无变化,整体色调暖黄低饱和。构图:三分法构图,书生置于画面右侧三分线,左侧三分之一留给窗口光影区域,视觉重心从左侧光带沿桌面引导至书生面部。动作节奏:前4秒全景保持,书生低头看书,仅胸口随呼吸轻微起伏;后3秒镜头推至中景,第5秒书生右手从左手背上开始移动,第7秒指尖到达书卷边缘。转场:直接顺接至下一镜头,画面保持中景构图、书生右手触及书卷边缘的姿态。\"\
            ,\n      \"动作绝对时间轴\": [\n        {\n          \"时间\": \"[0s - 4s]\",\n\
            \          \"画面动作\": \"全景,书生端坐桌前低头阅读,左手覆于右手背上平放桌面,胸口随呼吸轻微起伏,镜头极缓匀速推进,窗外光带在桌面缓慢延伸(随日出角度微变)\"\
            \n        },\n        {\n          \"时间\": \"[4s - 7s]\",\n          \"\
            画面动作\": \"镜头推至中景,第5秒书生右手从左手背上缓慢抽出,沿桌面向右匀速滑动,第7秒指尖到达书卷右下角边缘,同时眼帘微微抬起约15度\"\
            \n        }\n      ],\n      \"拟音\": \"晨鸟远鸣, 纸页与指尖轻微摩擦声, 木质结构环境底噪, 远处隐约鸡鸣\"\
            ,\n      \"对应原歌词结构部分\": {\n        \"start\": 0,\n        \"end\": 18,\n\
            \        \"description\": \"歌曲开头失真电吉他与中国大鼓直接切入,不作冗长铺垫,建立起磅礴的史诗感与新金属摇滚基调,为即将加入的人声迅速蓄力\"\
            ,\n        \"type\": \"能量上升\"\n      }\n    }\n  ]\n}"
        - id: b81e904a-94e0-4e31-a9ef-7917065bd42f
          role: user
          text: '

            story: {{#1776060778449.structured_output.story#}}

            lyrics_array: {{#1776124924070.caption_infos_str#}}


            歌词结构: {{#1778240988065.result#}}


            music_style: {{#1775575463958.music_style#}}


            美术风格: {{#1778567791902.art_style#}}'
        selected: false
        structured_output:
          schema:
            additionalProperties: false
            properties:
              分镜:
                items:
                  additionalProperties: false
                  properties:
                    动作绝对时间轴:
                      items:
                        additionalProperties: false
                        properties:
                          时间:
                            type: string
                          画面动作:
                            type: string
                        required:
                        - 时间
                        - 画面动作
                        type: object
                      type: array
                    对应原歌词结构部分:
                      additionalProperties: false
                      properties:
                        description:
                          type: string
                        end:
                          type: number
                        start:
                          type: number
                        type:
                          type: string
                      required:
                      - start
                      - end
                      - description
                      - type
                      type: object
                    对应歌词:
                      additionalProperties: false
                      properties:
                        duration:
                          type: number
                        end:
                          type: number
                        start:
                          type: number
                        text:
                          type: string
                      required:
                      - text
                      - start
                      - end
                      - duration
                      type: object
                    开始:
                      type: number
                    总时长:
                      type: number
                    拟音:
                      type: string
                    标题:
                      type: string
                    空间定位:
                      type: string
                    结束:
                      type: number
                    视频提示词:
                      type: string
                    转场入点:
                      type: string
                    转场出点:
                      type: string
                    镜号:
                      type: string
                  required:
                  - 镜号
                  - 标题
                  - 对应歌词
                  - 开始
                  - 结束
                  - 总时长
                  - 空间定位
                  - 转场入点
                  - 转场出点
                  - 视频提示词
                  - 动作绝对时间轴
                  - 拟音
                  - 对应原歌词结构部分
                  type: object
                type: array
              设定图:
                items:
                  additionalProperties: false
                  properties:
                    content:
                      type: string
                    name:
                      type: string
                  required:
                  - name
                  - content
                  type: object
                type: array
            required:
            - 设定图
            - 分镜
            type: object
        structured_output_enabled: true
        title: 设计分镜+服化道设定图
        type: llm
        variables: []
        video:
          configs:
            variable_selector: []
          enabled: false
        vision:
          enabled: false
      height: 122
      id: '1776687137943'
      position:
        x: 3172.77335655378
        y: 446.3656853543008
      positionAbsolute:
        x: 3172.77335655378
        y: 446.3656853543008
      selected: true
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - 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: gemini-3.1-pro-preview
          provider: aict/ai_hub/ai_hub
        prompt_template:
        - id: 8246ce75-5c62-4260-a482-960d7e75665b
          role: system
          text: "<instruction>\n你是一位专业的音乐能量分析师。你的任务是根据用户提供的音乐风格、歌词时间轴数据和歌词结构,分析整首歌曲中不同段落的能量变化,标注出高能量、低能量和爆发点。\n\
            \n请按照以下步骤完成分析:\n\n1. **理解音乐风格**:根据输入的音乐风格(如摇滚、流行、电子、民谣等),建立对该风格常见能量分布模式的认知。不同风格有不同的能量表达方式。\n\
            \n2. **分析歌词结构**:结合提供的歌词结构信息(如前奏、主歌、副歌、桥段、间奏、尾奏等),判断各段落在整体编曲中的能量定位。通常:\n\
            \   - 前奏/间奏:能量渐进或过渡\n   - 主歌(Verse):相对低能量,叙事铺垫\n   - 预副歌(Pre-chorus):能量上升,为副歌做铺垫\n\
            \   - 副歌(Chorus):高能量,情感释放\n   - 桥段(Bridge):能量变化,可能是低谷或转折\n   - 最后副歌/高潮:爆发点,最高能量\n\
            \   - 尾奏(Outro):能量逐渐下降\n\n3. **分析歌词内容**:通过歌词的情感强度、用词激烈程度、重复性等判断能量水平。感叹词、重复的副歌歌词、高情感密度的词句通常对应高能量。\n\
            \n4. **综合判断能量类型**:将每个时间段标注为以下类型之一:\n   - **低能量**:安静、平缓、叙事性段落\n   - **中能量**:适度的节奏感和情感表达\n\
            \   - **高能量**:强烈的节奏、饱满的情感\n   - **能量上升**:从低到高的过渡\n   - **能量下降**:从高到低的过渡\n\
            \   - **爆发**:突然的能量释放,通常是全曲最高潮\n   - **铺垫**:为即将到来的爆发做准备\n\n5. **输出格式**:以JSON对象格式输出,包含一个output对象,\
            \ output是数组对象格式,每个元素包含:\n   - start: 开始时间(与输入时间轴对应)\n   - end: 结束时间\n\
            \   - description: 对该段能量状态的详细描述(中文)\n   - type: 能量类型标签(中文,如\"低能量\"、\"\
            高能量\"、\"爆发\"、\"能量上升\"、\"铺垫\"等)\n{\n  \"output\":[\n    { \"start\": 0,\
            \ \"end\": 15, \"description\": \"前奏部分,吉他轻柔拨弦引入,营造氛围感,整体安静而具有期待感\", \"\
            type\": \"低能量\" },\n    { \"start\": 15, \"end\": 45, \"description\"\
            : \"主歌段落,人声平稳叙事,配器简单,以吉他和轻鼓为主,情感内敛\", \"type\": \"低能量\" },\n  ]\n}\n\n\
            注意事项:\n- 相邻的相同能量类型的歌词行可以合并为一个时间段\n- description 应包含对该段音乐表现力的具体描述,如乐器预期表现、人声状态等\n\
            - 确保时间轴连续,覆盖整首歌曲\n- 输出不要包含任何xml标签,直接输出JSON数组\n- 输出中保留歌词结构, 如前奏、主歌等\n</instruction>\n\
            \n<examples>\n示例1:\n\n输入:\n音乐风格:流行摇滚\n歌词时间轴:\n[\n  { \"start\": 0, \"\
            end\": 15, \"lyrics\": \"\" },\n  { \"start\": 15, \"end\": 30, \"lyrics\"\
            : \"走在无人的街道上\" },\n  { \"start\": 30, \"end\": 45, \"lyrics\": \"回忆像风一样吹过\"\
            \ },\n  { \"start\": 45, \"end\": 55, \"lyrics\": \"心跳开始加速\" },\n  { \"\
            start\": 55, \"end\": 70, \"lyrics\": \"我不再沉默\" },\n  { \"start\": 70,\
            \ \"end\": 85, \"lyrics\": \"大声喊出我的名字\" },\n  { \"start\": 85, \"end\"\
            : 100, \"lyrics\": \"让世界听见我的声音\" },\n  { \"start\": 100, \"end\": 115,\
            \ \"lyrics\": \"\" },\n  { \"start\": 115, \"end\": 130, \"lyrics\": \"\
            大声喊出我的名字\" },\n  { \"start\": 130, \"end\": 145, \"lyrics\": \"让世界听见我的声音\"\
            \ },\n  { \"start\": 145, \"end\": 160, \"lyrics\": \"\" }\n]\n歌词结构:前奏\
            \ - 主歌 - 预副歌 - 副歌 - 间奏 - 副歌 - 尾奏\n\n输出:\n{\n\"output\":[\n  { \"start\"\
            : 0, \"end\": 15, \"description\": \"前奏部分,吉他轻柔拨弦引入,营造氛围感,整体安静而具有期待感\"\
            , \"type\": \"低能量\" },\n  { \"start\": 15, \"end\": 45, \"description\"\
            : \"主歌段落,人声平稳叙事,配器简单,以吉他和轻鼓为主,情感内敛\", \"type\": \"低能量\" },\n  { \"start\"\
            : 45, \"end\": 55, \"description\": \"预副歌段落,节奏加快,鼓点加密,贝斯线条开始突出,为副歌积蓄能量\"\
            , \"type\": \"能量上升\" },\n  { \"start\": 55, \"end\": 85, \"description\"\
            : \"第一次副歌,全乐队加入,人声高亢有力,电吉他失真音色突出,情感释放\", \"type\": \"高能量\" },\n  { \"\
            start\": 85, \"end\": 100, \"description\": \"副歌延续至最高点,重复核心歌词强化情感冲击力\"\
            , \"type\": \"高能量\" },\n  { \"start\": 100, \"end\": 115, \"description\"\
            : \"间奏段落,乐器solo过渡,能量略有回落但保持节奏感\", \"type\": \"中能量\" },\n  { \"start\"\
            : 115, \"end\": 145, \"description\": \"最终副歌,全曲最高潮,所有乐器全开,人声达到最高音域,情感全面爆发\"\
            , \"type\": \"爆发\" },\n  { \"start\": 145, \"end\": 160, \"description\"\
            : \"尾奏部分,能量逐渐消散,乐器逐一退出,回归平静\", \"type\": \"能量下降\" }\n]\n}\n示例2:\n\n输入:\n\
            音乐风格:抒情民谣\n歌词时间轴:\n[\n  { \"start\": 0, \"end\": 10, \"lyrics\": \"\"\
            \ },\n  { \"start\": 10, \"end\": 25, \"lyrics\": \"那年秋天的落叶\" },\n  {\
            \ \"start\": 25, \"end\": 40, \"lyrics\": \"飘落在你的肩头\" },\n  { \"start\"\
            : 40, \"end\": 55, \"lyrics\": \"我多想再见你一面\" },\n  { \"start\": 55, \"\
            end\": 70, \"lyrics\": \"哪怕只是远远看着\" },\n  { \"start\": 70, \"end\": 85,\
            \ \"lyrics\": \"时光啊请慢一些\" },\n  { \"start\": 85, \"end\": 100, \"lyrics\"\
            : \"让我记住这一刻\" },\n  { \"start\": 100, \"end\": 110, \"lyrics\": \"\" }\n\
            ]\n歌词结构:前奏 - 主歌A - 主歌B - 副歌 - 尾奏\n\n输出:\n{\n\"output\":[\n  { \"start\"\
            : 0, \"end\": 10, \"description\": \"前奏部分,木吉他指弹引入,轻柔安静,营造温暖而略带忧伤的氛围\"\
            , \"type\": \"低能量\" },\n  { \"start\": 10, \"end\": 40, \"description\"\
            : \"主歌A段,人声轻声吟唱,仅木吉他伴奏,情感克制而细腻,如低声诉说\", \"type\": \"低能量\" },\n  { \"start\"\
            : 40, \"end\": 55, \"description\": \"主歌B段,情感开始加深,弦乐轻柔加入,人声略有起伏,表达内心渴望\"\
            , \"type\": \"中能量\" },\n  { \"start\": 55, \"end\": 70, \"description\"\
            : \"副歌前半段,情感进一步深化但保持民谣的克制感,弦乐铺底增加厚度\", \"type\": \"中能量\" },\n  { \"start\"\
            : 70, \"end\": 100, \"description\": \"副歌后半段,全曲情感最浓烈处,人声带有哭腔和颤音,弦乐达到最饱满状态,虽非摇滚式爆发但为民谣风格中的情感高潮\"\
            , \"type\": \"高能量\" },\n  { \"start\": 100, \"end\": 110, \"description\"\
            : \"尾奏,吉他回到简单指弹,余韵悠长,情感逐渐沉淀\", \"type\": \"能量下降\" }\n]\n}\n示例3:\n\n输入:\n\
            音乐风格:电子舞曲(EDM)\n歌词时间轴:\n[\n  { \"start\": 0, \"end\": 16, \"lyrics\":\
            \ \"\" },\n  { \"start\": 16, \"end\": 32, \"lyrics\": \"Feel the rhythm\
            \ in your soul\" },\n  { \"start\": 32, \"end\": 48, \"lyrics\": \"Let\
            \ the bass take control\" },\n  { \"start\": 48, \"end\": 64, \"lyrics\"\
            : \"\" },\n  { \"start\": 64, \"end\": 80, \"lyrics\": \"Drop it now\"\
            \ },\n  { \"start\": 80, \"end\": 96, \"lyrics\": \"Drop it now\" },\n\
            \  { \"start\": 96, \"end\": 112, \"lyrics\": \"\" },\n  { \"start\":\
            \ 112, \"end\": 128, \"lyrics\": \"We are unstoppable\" },\n  { \"start\"\
            : 128, \"end\": 144, \"lyrics\": \"We are unstoppable\" },\n  { \"start\"\
            : 144, \"end\": 160, \"lyrics\": \"\" }\n]\n歌词结构:Intro - Build up - Build\
            \ up - Break - Drop - Drop - Break - Final Drop - Final Drop - Outro\n\
            \n输出:\n{\n\"output\":[\n  { \"start\": 0, \"end\": 16, \"description\"\
            : \"Intro段落,合成器pad铺底,节奏元素逐步加入,kick鼓和hi-hat建立基础律动\", \"type\": \"低能量\"\
            \ },\n  { \"start\": 16, \"end\": 32, \"description\": \"Build up开始,人声加入,合成器音色叠加,滤波器逐渐打开,能量持续攀升\"\
            , \"type\": \"能量上升\" },\n  { \"start\": 32, \"end\": 48, \"description\"\
            : \"Build up高峰,snare roll加速,白噪音上升,riser音效制造极强张力,为drop做最终铺垫\", \"type\"\
            : \"铺垫\" },\n  { \"start\": 48, \"end\": 64, \"description\": \"短暂Break,所有元素突然抽离,仅保留极简音效,制造巨大反差和期待感\"\
            , \"type\": \"低能量\" },\n  { \"start\": 64, \"end\": 96, \"description\"\
            : \"第一次Drop,超重低音bass猛烈释放,合成器主旋律全开,kick鼓全力输出,全场爆炸性能量释放\", \"type\": \"\
            爆发\" },\n  { \"start\": 96, \"end\": 112, \"description\": \"Break段落,能量回落,滤波器关闭,为下一次drop重新积蓄力量\"\
            , \"type\": \"能量下降\" },\n  { \"start\": 112, \"end\": 144, \"description\"\
            : \"Final Drop,在第一次drop基础上叠加更多音色层次和人声chop,能量达到全曲顶峰,具有最强烈的冲击力\", \"type\"\
            : \"爆发\" },\n  { \"start\": 144, \"end\": 160, \"description\": \"Outro段落,元素逐步退出,reverb尾音延续,能量平缓消散\"\
            , \"type\": \"能量下降\" }\n]\n}\n</examples>"
        - id: 1da0bfb0-fd89-4c96-aaec-541a3d15d029
          role: user
          text: 'music_style: {{#1775575463958.music_style#}}


            lyrics_array: {{#1775575463958.lyrics_array#}}


            lyrics_info: {{#1775575463958.lyrics_structure#}}'
        selected: false
        structured_output:
          schema:
            additionalProperties: false
            properties:
              output:
                items:
                  additionalProperties: false
                  properties:
                    description:
                      type: string
                    end:
                      type: string
                    start:
                      type: string
                    type:
                      type: string
                  required:
                  - start
                  - end
                  - description
                  - type
                  type: object
                type: array
            required:
            - output
            type: object
        structured_output_enabled: true
        title: 音乐分析
        type: llm
        variables: []
        video:
          configs:
            variable_selector: []
          enabled: false
        vision:
          enabled: false
      height: 122
      id: '1778239776377'
      position:
        x: 660.9894432945935
        y: 469
      positionAbsolute:
        x: 660.9894432945935
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({output}) {\n    return {\n        result: JSON.stringify(output)\n\
          \    }\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          result:
            children: null
            type: string
        selected: false
        title: stringify
        type: code
        variables:
        - value_selector:
          - '1778239776377'
          - structured_output
          - output
          value_type: string
          variable: output
      height: 54
      id: '1778240988065'
      position:
        x: 979.9120600873217
        y: 469
      positionAbsolute:
        x: 979.9120600873217
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({lyrics_array, music_style, lyrics_structure, music_analysis})\
          \ {\n    return {\n        input: JSON.stringify({\n            lyrics_array,\n\
          \            music_style,\n            lyrics_structure\n        }),\n \
          \       output:JSON.stringify({music_analysis})\n    }\n}\n"
        code_language: javascript
        desc: ''
        error_strategy: fail-branch
        outputs:
          input:
            children: null
            type: string
          output:
            children: null
            type: string
        selected: false
        title: 日志数据生成-音乐分析
        type: code
        variables:
        - value_selector:
          - '1775575463958'
          - lyrics_array
          value_type: string
          variable: lyrics_array
        - value_selector:
          - '1775575463958'
          - music_style
          value_type: string
          variable: music_style
        - value_selector:
          - '1775575463958'
          - lyrics_structure
          value_type: string
          variable: lyrics_structure
        - value_selector:
          - '1778240988065'
          - result
          value_type: string
          variable: music_analysis
      height: 90
      id: '1778489931678'
      position:
        x: 1302.8762676635642
        y: 469
      positionAbsolute:
        x: 1302.8762676635642
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_strategy: fail-branch
        is_team_authorization: true
        output_schema: null
        outputs: []
        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: biz_type
          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: 业务 ID
            ja_JP: 业务 ID
            pt_BR: 业务 ID
            zh_Hans: 业务 ID
          llm_description: ''
          max: null
          min: null
          name: biz_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: node_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: 流程类型(chatflow, workflow)
            ja_JP: 流程类型(chatflow, workflow)
            pt_BR: 流程类型(chatflow, workflow)
            zh_Hans: 流程类型(chatflow, workflow)
          llm_description: ''
          max: null
          min: null
          name: flow_type
          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: phase
          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: node_name
          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: node_type
          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: 流程ID(conv_id, run_flow_id)
            ja_JP: 流程ID(conv_id, run_flow_id)
            pt_BR: 流程ID(conv_id, run_flow_id)
            zh_Hans: 流程ID(conv_id, run_flow_id)
          llm_description: ''
          max: null
          min: null
          name: flow_id
          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: input
          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: output
          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: error_message
          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: memo
          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: BOTID
            ja_JP: BOTID
            pt_BR: BOTID
            zh_Hans: BOTID
          llm_description: ''
          max: null
          min: null
          name: bot_id
          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: parent_biz_id
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        params:
          biz_id: ''
          biz_type: ''
          bot_id: ''
          error_message: ''
          flow_id: ''
          flow_type: ''
          input: ''
          memo: ''
          node_id: ''
          node_name: ''
          node_type: ''
          output: ''
          parent_biz_id: ''
          phase: ''
        provider_id: bfc3a5f0-e21e-452a-b1a5-d4789eecb5f3
        provider_name: AI课件-执行日志上报(v1.0)
        provider_type: workflow
        selected: false
        title: AI课件-执行日志上报(v1.0)
        tool_configurations: {}
        tool_description: AI课件-执行日志上报(v1.0)
        tool_label: AI课件-执行日志上报(v1.0)
        tool_name: aic_log_report
        tool_node_version: '2'
        tool_parameters:
          biz_id:
            type: mixed
            value: '{{#1775575463958.ai_course_log_id#}}'
          biz_type:
            type: mixed
            value: aic
          bot_id:
            type: mixed
            value: '{{#sys.app_id#}}'
          error_message:
            type: mixed
            value: null
          flow_id:
            type: mixed
            value: '{{#sys.workflow_run_id#}}'
          flow_type:
            type: mixed
            value: workflow
          input:
            type: mixed
            value: '{{#1778489931678.input#}}'
          memo:
            type: mixed
            value: null
          node_id:
            type: mixed
            value: story-main-1
          node_name:
            type: mixed
            value: 生成音乐分析
          node_type:
            type: mixed
            value: null
          output:
            type: mixed
            value: '{{#1778489931678.output#}}'
          parent_biz_id:
            type: mixed
            value: null
          phase:
            type: mixed
            value: 生成音乐分析
        type: tool
      height: 130
      id: '1778490000338'
      position:
        x: 1643.7399280000207
        y: 469
      positionAbsolute:
        x: 1643.7399280000207
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({lyrics_array, music_style, rhythm, poem_content, script})\
          \ {\n    return {\n        input: JSON.stringify({\n            lyrics_array,\n\
          \            music_style,\n            rhythm,\n            poem_content\n\
          \        }),\n        output:JSON.stringify({script})\n    }\n}\n"
        code_language: javascript
        desc: ''
        error_strategy: fail-branch
        outputs:
          input:
            children: null
            type: string
          output:
            children: null
            type: string
        selected: false
        title: 日志数据生成-设计叙事
        type: code
        variables:
        - value_selector:
          - '1775575463958'
          - lyrics_array
          value_type: string
          variable: lyrics_array
        - value_selector:
          - '1775575463958'
          - music_style
          value_type: string
          variable: music_style
        - value_selector:
          - '1778240988065'
          - result
          value_type: string
          variable: rhythm
        - value_selector:
          - '1775575463958'
          - poem_content
          value_type: string
          variable: poem_content
        - value_selector:
          - '1776060778449'
          - structured_output
          - story
          value_type: string
          variable: script
      height: 90
      id: '1778490195335'
      position:
        x: 2352.406291038393
        y: 330.17094513857546
      positionAbsolute:
        x: 2352.406291038393
        y: 330.17094513857546
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_strategy: fail-branch
        is_team_authorization: true
        output_schema: null
        outputs: []
        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: biz_type
          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: 业务 ID
            ja_JP: 业务 ID
            pt_BR: 业务 ID
            zh_Hans: 业务 ID
          llm_description: ''
          max: null
          min: null
          name: biz_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: node_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: 流程类型(chatflow, workflow)
            ja_JP: 流程类型(chatflow, workflow)
            pt_BR: 流程类型(chatflow, workflow)
            zh_Hans: 流程类型(chatflow, workflow)
          llm_description: ''
          max: null
          min: null
          name: flow_type
          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: phase
          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: node_name
          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: node_type
          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: 流程ID(conv_id, run_flow_id)
            ja_JP: 流程ID(conv_id, run_flow_id)
            pt_BR: 流程ID(conv_id, run_flow_id)
            zh_Hans: 流程ID(conv_id, run_flow_id)
          llm_description: ''
          max: null
          min: null
          name: flow_id
          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: input
          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: output
          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: error_message
          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: memo
          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: BOTID
            ja_JP: BOTID
            pt_BR: BOTID
            zh_Hans: BOTID
          llm_description: ''
          max: null
          min: null
          name: bot_id
          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: parent_biz_id
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        params:
          biz_id: ''
          biz_type: ''
          bot_id: ''
          error_message: ''
          flow_id: ''
          flow_type: ''
          input: ''
          memo: ''
          node_id: ''
          node_name: ''
          node_type: ''
          output: ''
          parent_biz_id: ''
          phase: ''
        provider_id: bfc3a5f0-e21e-452a-b1a5-d4789eecb5f3
        provider_name: AI课件-执行日志上报(v1.0)
        provider_type: workflow
        selected: false
        title: AI课件-执行日志上报(v1.0)
        tool_configurations: {}
        tool_description: AI课件-执行日志上报(v1.0)
        tool_label: AI课件-执行日志上报(v1.0)
        tool_name: aic_log_report
        tool_node_version: '2'
        tool_parameters:
          biz_id:
            type: mixed
            value: '{{#1775575463958.ai_course_log_id#}}'
          biz_type:
            type: mixed
            value: aic
          bot_id:
            type: mixed
            value: '{{#sys.app_id#}}'
          error_message:
            type: mixed
            value: null
          flow_id:
            type: mixed
            value: '{{#sys.workflow_run_id#}}'
          flow_type:
            type: mixed
            value: workflow
          input:
            type: mixed
            value: '{{#1778490195335.input#}}'
          memo:
            type: mixed
            value: null
          node_id:
            type: mixed
            value: story-main-2
          node_name:
            type: mixed
            value: 设计叙事
          node_type:
            type: mixed
            value: null
          output:
            type: mixed
            value: '{{#1778490195335.output#}}'
          parent_biz_id:
            type: mixed
            value: null
          phase:
            type: mixed
            value: 设计叙事
        type: tool
      height: 130
      id: '1778490533680'
      position:
        x: 2652.406291038393
        y: 330.17094513857546
      positionAbsolute:
        x: 2652.406291038393
        y: 330.17094513857546
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({story, lyrics_array, music_structure, music_style,\
          \ result}) {\n    return {\n        input: JSON.stringify({\n          \
          \  story,\n            lyrics_array,\n            music_structure,\n   \
          \         music_style\n        }),\n        output:JSON.stringify({result})\n\
          \    }\n}\n"
        code_language: javascript
        desc: ''
        error_strategy: fail-branch
        outputs:
          input:
            children: null
            type: string
          output:
            children: null
            type: string
        selected: false
        title: 日志数据生成-设计分镜
        type: code
        variables:
        - value_selector:
          - '1776060778449'
          - structured_output
          - story
          value_type: string
          variable: story
        - value_selector:
          - '1776124924070'
          - caption_infos_str
          value_type: string
          variable: lyrics_array
        - value_selector:
          - '1778240988065'
          - result
          value_type: string
          variable: music_structure
        - value_selector:
          - '1775575463958'
          - music_style
          value_type: string
          variable: music_style
        - value_selector:
          - '1776687137943'
          - structured_output
          - 分镜
          value_type: string
          variable: result
      height: 90
      id: '1778490652080'
      position:
        x: 3508.1809949287413
        y: 440.2767472700501
      positionAbsolute:
        x: 3508.1809949287413
        y: 440.2767472700501
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({story, style}) {\n    return {\n        input: JSON.stringify({\n\
          \            story,\n            style\n        }),\n        output:JSON.stringify({result})\n\
          \    }\n}\n"
        code_language: javascript
        desc: ''
        error_strategy: fail-branch
        outputs:
          input:
            children: null
            type: string
          output:
            children: null
            type: string
        selected: false
        title: 日志数据生成-服化道设计
        type: code
        variables:
        - value_selector:
          - '1776060778449'
          - structured_output
          - story
          value_type: string
          variable: story
        - value_selector:
          - '1775575463958'
          - style
          value_type: string
          variable: style
        - value_selector:
          - '1776687137943'
          - structured_output
          - 设定图
          value_type: string
          variable: result
      height: 90
      id: '1778490682327'
      position:
        x: 3513.404298308518
        y: 600.1255410053692
      positionAbsolute:
        x: 3513.404298308518
        y: 600.1255410053692
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_strategy: fail-branch
        is_team_authorization: true
        output_schema: null
        outputs: []
        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: biz_type
          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: 业务 ID
            ja_JP: 业务 ID
            pt_BR: 业务 ID
            zh_Hans: 业务 ID
          llm_description: ''
          max: null
          min: null
          name: biz_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: node_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: 流程类型(chatflow, workflow)
            ja_JP: 流程类型(chatflow, workflow)
            pt_BR: 流程类型(chatflow, workflow)
            zh_Hans: 流程类型(chatflow, workflow)
          llm_description: ''
          max: null
          min: null
          name: flow_type
          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: phase
          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: node_name
          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: node_type
          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: 流程ID(conv_id, run_flow_id)
            ja_JP: 流程ID(conv_id, run_flow_id)
            pt_BR: 流程ID(conv_id, run_flow_id)
            zh_Hans: 流程ID(conv_id, run_flow_id)
          llm_description: ''
          max: null
          min: null
          name: flow_id
          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: input
          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: output
          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: error_message
          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: memo
          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: BOTID
            ja_JP: BOTID
            pt_BR: BOTID
            zh_Hans: BOTID
          llm_description: ''
          max: null
          min: null
          name: bot_id
          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: parent_biz_id
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        params:
          biz_id: ''
          biz_type: ''
          bot_id: ''
          error_message: ''
          flow_id: ''
          flow_type: ''
          input: ''
          memo: ''
          node_id: ''
          node_name: ''
          node_type: ''
          output: ''
          parent_biz_id: ''
          phase: ''
        provider_id: bfc3a5f0-e21e-452a-b1a5-d4789eecb5f3
        provider_name: AI课件-执行日志上报(v1.0)
        provider_type: workflow
        selected: false
        title: AI课件-执行日志上报(v1.0)
        tool_configurations: {}
        tool_description: AI课件-执行日志上报(v1.0)
        tool_label: AI课件-执行日志上报(v1.0)
        tool_name: aic_log_report
        tool_node_version: '2'
        tool_parameters:
          biz_id:
            type: mixed
            value: '{{#1775575463958.ai_course_log_id#}}'
          biz_type:
            type: mixed
            value: aic
          bot_id:
            type: mixed
            value: '{{#sys.app_id#}}'
          error_message:
            type: mixed
            value: null
          flow_id:
            type: mixed
            value: '{{#sys.workflow_run_id#}}'
          flow_type:
            type: mixed
            value: workflow
          input:
            type: mixed
            value: '{{#1778490652080.input#}}'
          memo:
            type: mixed
            value: null
          node_id:
            type: mixed
            value: story-main-3
          node_name:
            type: mixed
            value: 设计分镜
          node_type:
            type: mixed
            value: null
          output:
            type: mixed
            value: '{{#1778490652080.output#}}'
          parent_biz_id:
            type: mixed
            value: null
          phase:
            type: mixed
            value: 设计分镜
        type: tool
      height: 130
      id: '1778491060957'
      position:
        x: 3781.9158359268254
        y: 440.2767472700501
      positionAbsolute:
        x: 3781.9158359268254
        y: 440.2767472700501
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_strategy: fail-branch
        is_team_authorization: true
        output_schema: null
        outputs: []
        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: biz_type
          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: 业务 ID
            ja_JP: 业务 ID
            pt_BR: 业务 ID
            zh_Hans: 业务 ID
          llm_description: ''
          max: null
          min: null
          name: biz_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: node_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: 流程类型(chatflow, workflow)
            ja_JP: 流程类型(chatflow, workflow)
            pt_BR: 流程类型(chatflow, workflow)
            zh_Hans: 流程类型(chatflow, workflow)
          llm_description: ''
          max: null
          min: null
          name: flow_type
          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: phase
          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: node_name
          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: node_type
          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: 流程ID(conv_id, run_flow_id)
            ja_JP: 流程ID(conv_id, run_flow_id)
            pt_BR: 流程ID(conv_id, run_flow_id)
            zh_Hans: 流程ID(conv_id, run_flow_id)
          llm_description: ''
          max: null
          min: null
          name: flow_id
          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: input
          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: output
          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: error_message
          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: memo
          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: BOTID
            ja_JP: BOTID
            pt_BR: BOTID
            zh_Hans: BOTID
          llm_description: ''
          max: null
          min: null
          name: bot_id
          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: parent_biz_id
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        params:
          biz_id: ''
          biz_type: ''
          bot_id: ''
          error_message: ''
          flow_id: ''
          flow_type: ''
          input: ''
          memo: ''
          node_id: ''
          node_name: ''
          node_type: ''
          output: ''
          parent_biz_id: ''
          phase: ''
        provider_id: bfc3a5f0-e21e-452a-b1a5-d4789eecb5f3
        provider_name: AI课件-执行日志上报(v1.0)
        provider_type: workflow
        selected: false
        title: AI课件-执行日志上报(v1.0)
        tool_configurations: {}
        tool_description: AI课件-执行日志上报(v1.0)
        tool_label: AI课件-执行日志上报(v1.0)
        tool_name: aic_log_report
        tool_node_version: '2'
        tool_parameters:
          biz_id:
            type: mixed
            value: '{{#1775575463958.ai_course_log_id#}}'
          biz_type:
            type: mixed
            value: aic
          bot_id:
            type: mixed
            value: '{{#sys.app_id#}}'
          error_message:
            type: mixed
            value: null
          flow_id:
            type: mixed
            value: '{{#sys.workflow_run_id#}}'
          flow_type:
            type: mixed
            value: workflow
          input:
            type: mixed
            value: '{{#1778490682327.input#}}'
          memo:
            type: mixed
            value: null
          node_id:
            type: mixed
            value: story-main-4
          node_name:
            type: mixed
            value: 服化道设计
          node_type:
            type: mixed
            value: null
          output:
            type: mixed
            value: '{{#1778490682327.output#}}'
          parent_biz_id:
            type: mixed
            value: null
          phase:
            type: mixed
            value: 服化道设计
        type: tool
      height: 130
      id: '1778491085262'
      position:
        x: 3781.9158359268254
        y: 608.8193022614805
      positionAbsolute:
        x: 3781.9158359268254
        y: 608.8193022614805
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({clothing, result}) {\n     return {\n        input:\
          \ JSON.stringify({\n            clothing\n        }),\n        output:JSON.stringify({result})\n\
          \    }\n}\n"
        code_language: javascript
        desc: ''
        error_strategy: fail-branch
        outputs:
          input:
            children: null
            type: string
          output:
            children: null
            type: string
        selected: false
        title: 日志数据生成 -生成参考图
        type: code
        variables:
        - value_selector:
          - '1776687137943'
          - structured_output
          - 设定图
          value_type: string
          variable: clothing
        - value_selector:
          - '1776187568336'
          - output
          value_type: array[object]
          variable: result
      height: 90
      id: '1778491598257'
      position:
        x: 6720.763416021866
        y: 469
      positionAbsolute:
        x: 6720.763416021866
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_strategy: fail-branch
        is_team_authorization: true
        output_schema: null
        outputs: []
        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: biz_type
          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: 业务 ID
            ja_JP: 业务 ID
            pt_BR: 业务 ID
            zh_Hans: 业务 ID
          llm_description: ''
          max: null
          min: null
          name: biz_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: node_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: 流程类型(chatflow, workflow)
            ja_JP: 流程类型(chatflow, workflow)
            pt_BR: 流程类型(chatflow, workflow)
            zh_Hans: 流程类型(chatflow, workflow)
          llm_description: ''
          max: null
          min: null
          name: flow_type
          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: phase
          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: node_name
          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: node_type
          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: 流程ID(conv_id, run_flow_id)
            ja_JP: 流程ID(conv_id, run_flow_id)
            pt_BR: 流程ID(conv_id, run_flow_id)
            zh_Hans: 流程ID(conv_id, run_flow_id)
          llm_description: ''
          max: null
          min: null
          name: flow_id
          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: input
          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: output
          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: error_message
          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: memo
          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: BOTID
            ja_JP: BOTID
            pt_BR: BOTID
            zh_Hans: BOTID
          llm_description: ''
          max: null
          min: null
          name: bot_id
          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: parent_biz_id
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        params:
          biz_id: ''
          biz_type: ''
          bot_id: ''
          error_message: ''
          flow_id: ''
          flow_type: ''
          input: ''
          memo: ''
          node_id: ''
          node_name: ''
          node_type: ''
          output: ''
          parent_biz_id: ''
          phase: ''
        provider_id: bfc3a5f0-e21e-452a-b1a5-d4789eecb5f3
        provider_name: AI课件-执行日志上报(v1.0)
        provider_type: workflow
        selected: false
        title: AI课件-执行日志上报(v1.0)
        tool_configurations: {}
        tool_description: AI课件-执行日志上报(v1.0)
        tool_label: AI课件-执行日志上报(v1.0)
        tool_name: aic_log_report
        tool_node_version: '2'
        tool_parameters:
          biz_id:
            type: mixed
            value: '{{#1775575463958.ai_course_log_id#}}'
          biz_type:
            type: mixed
            value: aic
          bot_id:
            type: mixed
            value: '{{#sys.app_id#}}'
          error_message:
            type: mixed
            value: null
          flow_id:
            type: mixed
            value: '{{#sys.workflow_run_id#}}'
          flow_type:
            type: mixed
            value: workflow
          input:
            type: mixed
            value: '{{#1778491598257.input#}}'
          memo:
            type: mixed
            value: null
          node_id:
            type: mixed
            value: story-main-5
          node_name:
            type: mixed
            value: 生成参考图
          node_type:
            type: mixed
            value: null
          output:
            type: mixed
            value: '{{#1778491598257.output#}}'
          parent_biz_id:
            type: mixed
            value: null
          phase:
            type: mixed
            value: 生成参考图
        type: tool
      height: 130
      id: '1778491798610'
      position:
        x: 7006.401789656891
        y: 469
      positionAbsolute:
        x: 7006.401789656891
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({storyboard, result}) {\n    return {\n        input:\
          \ JSON.stringify({\n            storyboard\n        }),\n        output:JSON.stringify({result})\n\
          \    }\n}\n"
        code_language: javascript
        desc: ''
        error_strategy: fail-branch
        outputs:
          input:
            children: null
            type: string
          output:
            children: null
            type: string
        selected: false
        title: 日志数据生成-生成视频
        type: code
        variables:
        - value_selector:
          - '1776687137943'
          - structured_output
          - 分镜
          value_type: string
          variable: storyboard
        - value_selector:
          - '1775586681775'
          - output
          value_type: array[object]
          variable: result
      height: 90
      id: '1778491967963'
      position:
        x: 9383.61515554033
        y: 469
      positionAbsolute:
        x: 9383.61515554033
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_strategy: fail-branch
        is_team_authorization: true
        output_schema: null
        outputs: []
        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: biz_type
          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: 业务 ID
            ja_JP: 业务 ID
            pt_BR: 业务 ID
            zh_Hans: 业务 ID
          llm_description: ''
          max: null
          min: null
          name: biz_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: node_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: 流程类型(chatflow, workflow)
            ja_JP: 流程类型(chatflow, workflow)
            pt_BR: 流程类型(chatflow, workflow)
            zh_Hans: 流程类型(chatflow, workflow)
          llm_description: ''
          max: null
          min: null
          name: flow_type
          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: phase
          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: node_name
          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: node_type
          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: 流程ID(conv_id, run_flow_id)
            ja_JP: 流程ID(conv_id, run_flow_id)
            pt_BR: 流程ID(conv_id, run_flow_id)
            zh_Hans: 流程ID(conv_id, run_flow_id)
          llm_description: ''
          max: null
          min: null
          name: flow_id
          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: input
          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: output
          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: error_message
          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: memo
          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: BOTID
            ja_JP: BOTID
            pt_BR: BOTID
            zh_Hans: BOTID
          llm_description: ''
          max: null
          min: null
          name: bot_id
          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: parent_biz_id
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        params:
          biz_id: ''
          biz_type: ''
          bot_id: ''
          error_message: ''
          flow_id: ''
          flow_type: ''
          input: ''
          memo: ''
          node_id: ''
          node_name: ''
          node_type: ''
          output: ''
          parent_biz_id: ''
          phase: ''
        provider_id: bfc3a5f0-e21e-452a-b1a5-d4789eecb5f3
        provider_name: AI课件-执行日志上报(v1.0)
        provider_type: workflow
        selected: false
        title: AI课件-执行日志上报(v1.0)
        tool_configurations: {}
        tool_description: AI课件-执行日志上报(v1.0)
        tool_label: AI课件-执行日志上报(v1.0)
        tool_name: aic_log_report
        tool_node_version: '2'
        tool_parameters:
          biz_id:
            type: mixed
            value: '{{#1775575463958.ai_course_log_id#}}'
          biz_type:
            type: mixed
            value: aic
          bot_id:
            type: mixed
            value: '{{#sys.app_id#}}'
          error_message:
            type: mixed
            value: null
          flow_id:
            type: mixed
            value: '{{#sys.workflow_run_id#}}'
          flow_type:
            type: mixed
            value: workflow
          input:
            type: mixed
            value: '{{#1778491967963.input#}}'
          memo:
            type: mixed
            value: null
          node_id:
            type: mixed
            value: story-main-6
          node_name:
            type: mixed
            value: 生成视频
          node_type:
            type: mixed
            value: ''
          output:
            type: mixed
            value: '{{#1778491967963.output#}}'
          parent_biz_id:
            type: mixed
            value: null
          phase:
            type: mixed
            value: 生成视频
        type: tool
      height: 130
      id: '1778492144233'
      position:
        x: 9705.841861179224
        y: 469
      positionAbsolute:
        x: 9705.841861179224
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({style}) {\n    return {\n        art_style: style\
          \ || \"3D,国风动漫\"\n    }\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          art_style:
            children: null
            type: string
        selected: false
        title: 美术风格为空默认值
        type: code
        variables:
        - value_selector:
          - '1775575463958'
          - style
          value_type: string
          variable: style
      height: 54
      id: '1778567791902'
      position:
        x: 360.9894432945934
        y: 469
      positionAbsolute:
        x: 360.9894432945934
        y: 469
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main({output}) {\n    return {\n        output: output.filter(Boolean)\n\
          \    }\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          output:
            children: null
            type: array[object]
        selected: false
        title: 生成人物参考图-去除null
        type: code
        variables:
        - value_selector:
          - '1776187568336'
          - output
          value_type: array[object]
          variable: output
      height: 54
      id: '1778664916524'
      position:
        x: 6420.763416021866
        y: 469
      positionAbsolute:
        x: 6420.763416021866
        y: 469
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        isInIteration: true
        selected: false
        title: ''
        type: iteration-start
      draggable: false
      height: 48
      id: 1775586681775start
      parentId: '1775586681775'
      position:
        x: 60
        y: 149.5
      positionAbsolute:
        x: 7366.401789656891
        y: 618.5
      selectable: false
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom-iteration-start
      width: 44
      zIndex: 1002
    - data:
        code: "\nfunction main({video, start, end, duration, video2}) {\n    return\
          \ {\n        info: {\n            video_url: (video ? video[0] : video2[0]).remote_url,\n\
          \            width: 1920,\n            height: 1080,\n            start:\
          \ parseFloat(start),\n            end: parseFloat(end),\n            duration:\
          \ parseFloat(duration)\n        }\n    }\n}\n"
        code_language: javascript
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        outputs:
          info:
            children: null
            type: object
        selected: false
        title: result
        type: code
        variables:
        - value_selector:
          - '1778328331140'
          - videos
          value_type: array[file]
          variable: video
        - value_selector:
          - '1776688518682'
          - start
          value_type: string
          variable: start
        - value_selector:
          - '1776688518682'
          - end
          value_type: string
          variable: end
        - value_selector:
          - '1776688518682'
          - duration
          value_type: string
          variable: duration
        - value_selector:
          - '1778488520258'
          - videos
          value_type: array[file]
          variable: video2
      height: 54
      id: '1775594043410'
      parentId: '1775586681775'
      position:
        x: 1664.7285494041043
        y: 184.1007238501553
      positionAbsolute:
        x: 8971.130339060996
        y: 653.1007238501553
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        desc: ''
        isInIteration: true
        selected: false
        title: ''
        type: iteration-start
      draggable: false
      height: 48
      id: 1776187568336start
      parentId: '1776187568336'
      position:
        x: 60
        y: 202.9689828505567
      positionAbsolute:
        x: 4295.594311888455
        y: 803.0945238559259
      selectable: false
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom-iteration-start
      width: 44
      zIndex: 1002
    - data:
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        model_info:
          config_version: v1
          model_id: gpt-image-2-t2i
          model_name: GPT Image 2.0 文生图
          provider: openai
          provider_name: OpenAI
        params:
          background:
            type: constant
            value: auto
          enable_cs_transfer:
            type: constant
            value: true
          n:
            type: constant
            value: 1
          output_compression:
            type: constant
            value: 100
          output_format:
            type: constant
            value: png
          prompt:
            type: constant
            value: '{{#1776187788358.content#}}, 在空白处添加文字: {{#1776187788358.name#}}'
          quality:
            type: constant
            value: auto
          size:
            type: constant
            value: auto
        selected: false
        title: 生图
        type: image-generation
      height: 220
      id: '1776187614988'
      parentId: '1776187568336'
      position:
        x: 1116
        y: 60
      positionAbsolute:
        x: 5351.594311888455
        y: 660.1255410053692
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        code: "\nfunction main({assets}) {\n    return {\n        name: assets.name,\n\
          \        content: assets.content,\n    }\n}\n"
        code_language: javascript
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        outputs:
          content:
            children: null
            type: string
          name:
            children: null
            type: string
        selected: false
        title: unpack params
        type: code
        variables:
        - value_selector:
          - '1776187568336'
          - item
          value_type: string
          variable: assets
      height: 54
      id: '1776187788358'
      parentId: '1776187568336'
      position:
        x: 163.18443821246
        y: 208.04161872943928
      positionAbsolute:
        x: 4398.778750100915
        y: 808.1671597348085
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        code: "\nfunction main({name, images, jm_images, prompt, json, is_mxr}) {\n\
          \    let image = '';\n    if (json && json.length) {\n        image = json[0].image_url_list[0];\n\
          \    } else if (images && images.length) {\n        image = images[0].url\n\
          \    } else {\n        if (jm_images && jm_images.length) {\n          \
          \  image = jm_images[0].url\n        }\n    }\n    return {\n        output:\
          \ {\n            name: name,\n            image: image,\n            prompt:\
          \ prompt\n        }\n    }\n}\n"
        code_language: javascript
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        outputs:
          output:
            children: null
            type: object
        selected: false
        title: output
        type: code
        variables:
        - value_selector:
          - '1776187788358'
          - name
          value_type: string
          variable: name
        - value_selector:
          - '1776187614988'
          - images
          value_type: array[file]
          variable: images
        - value_selector:
          - '1778482590738'
          - images
          value_type: array[file]
          variable: jm_images
        - value_selector:
          - '1776187788358'
          - content
          value_type: string
          variable: prompt
        - value_selector:
          - '1776989550852'
          - json
          value_type: array[object]
          variable: json
        - value_selector:
          - '1775575463958'
          - is_mxr
          value_type: string
          variable: is_mxr
      height: 54
      id: '1776189738219'
      parentId: '1776187568336'
      position:
        x: 1950.3452544377683
        y: 377.66415696047
      positionAbsolute:
        x: 6185.939566326224
        y: 977.7896979658392
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        cases:
        - case_id: 'true'
          conditions:
          - comparison_operator: not empty
            id: e088a175-737d-497c-b20a-50811200cc15
            value: ''
            varType: string
            variable_selector:
            - '1776187568336'
            - item
          id: 'true'
          logical_operator: and
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        selected: false
        title: 条件分支 2
        type: if-else
      height: 126
      id: '1776193156140'
      parentId: '1776187568336'
      position:
        x: 457.180523109826
        y: 214.21886122373638
      positionAbsolute:
        x: 4692.774834998281
        y: 814.3444022291055
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        code: "\nfunction main({current, assets, aspect}) {\n    let duration = Math.ceil(current['结束']\
          \ - current['开始']).toString();\n    let video_duration = duration;\n   \
          \ if (video_duration < 4 || video_duration > 15) {\n        video_duration\
          \ = -1;\n    }\n\n    // 获取所有@【xxx_设定图】\n    const used_assets = (current['视频提示词'].match(/【(.*?)】/g)\
          \ || []).map(s => s.slice(1, -1));\n    let prompt = current['视频提示词']\n\
          \    const urls = [];\n    for (let i = 0; i < used_assets.length; i++)\
          \ {\n        // 将@场景_设定图 => @image1\n        prompt = prompt.replaceAll(`【${used_assets[i]}】`,\
          \ `image${i+1}`);\n        const found_asset = assets.find(a => a.name ===\
          \ used_assets[i]);\n        if (found_asset) {\n            urls.push(found_asset.image\
          \ || \"\");\n            prompt = prompt + `\\nimage${i+1}: ${found_asset.prompt}`\n\
          \        }\n    }\n\n\n\n    return {\n        start: current['开始'].toString(),\n\
          \        end: current['结束'].toString(),\n        duration: duration.toString(),\n\
          \        video_duration: Math.ceil(video_duration),\n        prompt: prompt,\n\
          \        urls: urls.filter(Boolean).join(','),\n        aspect: aspect ===\
          \ '横屏' ? '16:9' : '9:16',\n    }\n}\n"
        code_language: javascript
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        outputs:
          aspect:
            children: null
            type: string
          duration:
            children: null
            type: string
          end:
            children: null
            type: string
          prompt:
            children: null
            type: string
          start:
            children: null
            type: string
          urls:
            children: null
            type: string
          video_duration:
            children: null
            type: number
        selected: false
        title: segment_pack_new
        type: code
        variables:
        - value_selector:
          - '1775586681775'
          - item
          value_type: string
          variable: current
        - value_selector:
          - '1778664916524'
          - output
          value_type: string
          variable: assets
        - value_selector:
          - '1775575463958'
          - aspect
          value_type: string
          variable: aspect
      height: 54
      id: '1776688518682'
      parentId: '1775586681775'
      position:
        x: 304.30555956165335
        y: 142.54197661998364
      positionAbsolute:
        x: 7610.707349218545
        y: 611.5419766199836
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        cases:
        - case_id: 'true'
          conditions:
          - comparison_operator: is
            id: 9d4092fe-1398-4fa6-a7e6-11199a1159ee
            value: 是
            varType: string
            variable_selector:
            - '1775575463958'
            - is_mxr
          id: 'true'
          logical_operator: and
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        selected: false
        title: 是否喵星人
        type: if-else
      height: 126
      id: '1776989404798'
      parentId: '1776187568336'
      position:
        x: 680.0538173612072
        y: 449.81831541419336
      positionAbsolute:
        x: 4915.648129249663
        y: 1049.9438564195625
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        desc: ''
        isInIteration: true
        isInLoop: false
        is_team_authorization: true
        iteration_id: '1776187568336'
        output_schema: null
        outputs:
        - type: any
          value_selector:
          - '1747217598274'
          - text
          variable: output
        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: Characterform
          options:
          - 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: 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: ref_image
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: file
        - 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: Charactersetting
          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: Artstyle
          options:
          - icon: null
            label:
              en_US: IP默认风格
              ja_JP: IP默认风格
              pt_BR: IP默认风格
              zh_Hans: IP默认风格
            value: IP默认风格
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          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: body_type
          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: 矮小体型
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          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: Materialeffect
          options:
          - icon: null
            label:
              en_US: 写实毛绒(IP优选)
              ja_JP: 写实毛绒(IP优选)
              pt_BR: 写实毛绒(IP优选)
              zh_Hans: 写实毛绒(IP优选)
            value: 写实毛绒(IP优选)
          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: output_type
          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: true
          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: image_count
          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: negative_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: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 提示词引导系数(默认1.5)
            ja_JP: 提示词引导系数(默认1.5)
            pt_BR: 提示词引导系数(默认1.5)
            zh_Hans: 提示词引导系数(默认1.5)
          llm_description: ''
          max: null
          min: null
          name: cfg_scale
          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: 迭代步数(默认8)
            ja_JP: 迭代步数(默认8)
            pt_BR: 迭代步数(默认8)
            zh_Hans: 迭代步数(默认8)
          llm_description: ''
          max: null
          min: null
          name: sampling_steps
          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: lora权重(默认1,取值范围[0.2-2])
            ja_JP: lora权重(默认1,取值范围[0.2-2])
            pt_BR: lora权重(默认1,取值范围[0.2-2])
            zh_Hans: lora权重(默认1,取值范围[0.2-2])
          llm_description: ''
          max: null
          min: null
          name: lora_strength
          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: 体型控制权重(默认0.6,取值范围[0.2-1])
            ja_JP: 体型控制权重(默认0.6,取值范围[0.2-1])
            pt_BR: 体型控制权重(默认0.6,取值范围[0.2-1])
            zh_Hans: 体型控制权重(默认0.6,取值范围[0.2-1])
          llm_description: ''
          max: null
          min: null
          name: controlnet_strength
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        params:
          Artstyle: ''
          Characterform: ''
          Charactersetting: ''
          Materialeffect: ''
          body_type: ''
          cfg_scale: ''
          controlnet_strength: ''
          image_count: ''
          lora_strength: ''
          negative_prompt: ''
          output_type: ''
          ref_image: ''
          sampling_steps: ''
        provider_id: 9d4caa21-fa72-488e-a2da-2c2402db02f3
        provider_name: 资源生产管理中心_喵星人2.0蚕豆眼种族设计生产线(AIGC形象概念设计)
        provider_type: workflow
        selected: false
        title: 资源生产管理中心_喵星人2.0蚕豆眼种族设计生产线(AIGC形象概念设计)
        tool_configurations: {}
        tool_description: 建立喵星人IP角色形象设计生产线的搭建,可将IP人设导入到该生产线中,通过形象设计要求选择所需的美术设定信息,用AIGC快速生成符合人设需求、项目应用所需的概念设计图。
        tool_label: 资源生产管理中心_喵星人2.0蚕豆眼种族设计生产线(AIGC形象概念设计)
        tool_name: CatPeople_2_0_design
        tool_node_version: '2'
        tool_parameters:
          Artstyle:
            type: constant
            value: IP默认风格
          Characterform:
            type: constant
            value: 拟人喵(两足人形)
          Charactersetting:
            type: mixed
            value: 风格:{{#1778567791902.art_style#}}, {{#1776187788358.content#}}
          Materialeffect:
            type: constant
            value: 写实毛绒(IP优选)
          body_type:
            type: constant
            value: 标准体型
          cfg_scale:
            type: mixed
            value: null
          controlnet_strength:
            type: mixed
            value: null
          image_count:
            type: constant
            value: 1
          lora_strength:
            type: mixed
            value: ''
          negative_prompt:
            type: mixed
            value: null
          output_type:
            type: constant
            value: 全身站立设计图(竖屏)
          ref_image:
            type: constant
            value: null
          sampling_steps:
            type: constant
            value: null
        type: tool
      height: 94
      id: '1776989550852'
      parentId: '1776187568336'
      position:
        x: 1426.4817252047355
        y: 376.64360910515364
      positionAbsolute:
        x: 5662.076037093191
        y: 976.7691501105228
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        classes:
        - id: '1'
          name: 是人物
        - id: '2'
          name: 不是人物
        desc: ''
        instruction: 判断输入的内容是否属于一个人物的描述
        instructions: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        model:
          completion_params:
            json_schema: ''
            max_tokens: 65535
            media_resolution: default
            paygo_mode: standard
            reasoning_effort: high
            response_format: text
            temperature: 0.7
            top_p: 0.95
          mode: chat
          name: gemini-3.1-pro-preview
          provider: aict/ai_hub/ai_hub
        query_variable_selector:
        - '1776187788358'
        - name
        selected: false
        title: 是否人物
        topics: []
        type: question-classifier
        vision:
          enabled: false
      height: 204
      id: '1777868597968'
      parentId: '1776187568336'
      position:
        x: 1091.8181343921046
        y: 343.2006494995448
      positionAbsolute:
        x: 5327.412446280559
        y: 943.3261905049139
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        audio:
          configs:
            variable_selector: []
          enabled: false
        context:
          enabled: false
          variable_selector: []
        desc: ''
        document:
          configs:
            variable_selector: []
          enabled: false
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        model:
          completion_params: {}
          mode: chat
          name: gemini-3.1-pro-preview
          provider: aict/ai_hub/ai_hub
        prompt_template:
        - id: 4ea25118-c5a7-4f92-8479-93e1f794a5f5
          role: system
          text: '<instruction>

            你是一个专业的AI视频生成提示词优化专家。你的任务是将用户输入的视频生成prompt进行结构化优化,使其更加清晰、详细、逻辑严谨。请严格按照以下步骤执行:


            第一步:分析原始prompt

            - 仔细阅读用户提供的视频生成prompt

            - 识别其中的关键要素:风格、场景、角色、动作、运镜、光影、节奏、转场等

            - 找出描述模糊、逻辑矛盾或缺失的部分


            第二步:结构化重组

            将prompt按照以下固定模块进行重组,每个模块用【】标注:

            - 【风格】:整体视觉风格、是否有字幕等基础设定

            - 【承接】:与上一镜头的衔接说明

            - 【场景描述】:环境、空间、背景的详细描述

            - 【角色与物体】:角色的位置、姿态、外观、动作,以及关键物体的状态

            - 【摄像机位置】:摄像机初始所在的位置

            - 【运镜】:镜头运动方式、速度、起止构图

            - 【光影】:光源方向、明暗对比、色调、氛围

            - 【动作与节奏】:按时间线逐帧/逐秒描述角色的具体动作,确保每个动作有明确的起止时间和幅度

            - 【转场】:本镜头结束时的过渡方式


            第三步:优化细节

            - 所有动作描述必须足够直白、具体,避免抽象或模糊的表述

            - 检查时间线上的动作是否存在逻辑冲突(如同一时间段内矛盾的动作)

            - 补充缺失的细节(如动作幅度、速度、方向等)

            - 确保空间关系合理(角色与场景的位置关系)


            第四步:保留特殊标记

            - 所有@image1、@image2等图片引用标记必须原封不动保留,不做任何修改

            - 保持这些标记在语义上与原文一致的位置


            第五步:输出

            - 只输出优化后的结果文本,不要包含任何解释、说明、注释或XML标签

            - 不要输出"优化后的prompt:"之类的前缀

            - 直接输出最终的结构化prompt文本

            - 输入不超过5000字

            </instruction>'
        - id: 8e9de3ac-1e1a-480f-b673-8c1bc03a5eef
          role: user
          text: '{{#1776688518682.prompt#}}'
        selected: false
        title: 分镜提示词
        type: llm
        variables: []
        video:
          configs:
            variable_selector: []
          enabled: false
        vision:
          enabled: false
      height: 122
      id: '1777870559743'
      parentId: '1775586681775'
      position:
        x: 638.9295976960202
        y: 137.6220254168394
      positionAbsolute:
        x: 7945.331387352911
        y: 606.6220254168394
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        model_info:
          config_version: v1
          model_id: jimeng-seedance-2-0-r2v
          model_name: 即梦 Seedance 2.0 参考帧生视频
          provider: jimeng
          provider_name: 即梦
        params:
          duration:
            type: variable
            value_selector:
            - '1776688518682'
            - video_duration
          enable_cs_transfer:
            type: constant
            value: true
          generate_audio:
            type: constant
            value: true
          image_asset_ids:
            type: constant
            value: null
          image_input_type:
            type: constant
            value: url
          image_urls:
            type: constant
            value: '{{#1776688518682.urls#}}'
          prompt:
            type: constant
            value: '{{#1777870559743.text#}},声音只出现音效, 没有背景乐、人声。'
          ratio:
            type: variable
            value_selector:
            - '1776688518682'
            - aspect
          reference_images:
            type: constant
            value: null
          resolution:
            type: constant
            value: 1080p
          seed:
            type: constant
            value: -1
          watermark:
            type: constant
            value: false
        selected: false
        title: 有参考图
        type: video-generation
      height: 320
      id: '1778328331140'
      parentId: '1775586681775'
      position:
        x: 1355.888284818956
        y: 150.71318788088342
      positionAbsolute:
        x: 8662.290074475848
        y: 619.7131878808834
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1776187568336'
        model_info:
          config_version: v1
          model_id: gpt-image-2-t2i
          model_name: GPT Image 2.0 文生图
          provider: openai
          provider_name: OpenAI
        params:
          background:
            type: constant
            value: auto
          enable_cs_transfer:
            type: constant
            value: true
          n:
            type: constant
            value: 1
          output_compression:
            type: constant
            value: 100
          output_format:
            type: constant
            value: jpeg
          prompt:
            type: constant
            value: 风格:{{#1778567791902.art_style#}}, {{#1776187788358.content#}}
          quality:
            type: constant
            value: high
          size:
            type: constant
            value: 3840x2160
        selected: false
        title: 图像生成 2
        type: image-generation
      height: 236
      id: '1778482590738'
      parentId: '1776187568336'
      position:
        x: 1507.1620726476617
        y: 587.6412939219501
      positionAbsolute:
        x: 5742.7563845361165
        y: 1187.7668349273195
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        cases:
        - case_id: 'true'
          conditions:
          - comparison_operator: not empty
            id: 4259435a-b4de-4f1e-bac1-675c6e789114
            value: ''
            varType: string
            variable_selector:
            - '1776688518682'
            - urls
          id: 'true'
          logical_operator: and
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        selected: false
        title: 是否有参考图
        type: if-else
      height: 126
      id: '1778488487584'
      parentId: '1775586681775'
      position:
        x: 949.6114995599155
        y: 309.20087038862846
      positionAbsolute:
        x: 8256.013289216808
        y: 778.2008703886285
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        desc: ''
        isInIteration: true
        isInLoop: false
        iteration_id: '1775586681775'
        model_info:
          config_version: v1
          model_id: jimeng-seedance-2-0-t2v
          model_name: 即梦 Seedance 2.0 文生视频
          provider: jimeng
          provider_name: 即梦
        params:
          duration:
            type: variable
            value_selector:
            - '1776688518682'
            - video_duration
          enable_cs_transfer:
            type: constant
            value: true
          enable_web_search:
            type: constant
            value: false
          generate_audio:
            type: constant
            value: true
          prompt:
            type: constant
            value: '{{#1777870559743.text#}},声音只出现音效, 没有背景乐、人声。'
          ratio:
            type: variable
            value_selector:
            - '1776688518682'
            - aspect
          resolution:
            type: constant
            value: 1080p
          seed:
            type: constant
            value: -1
          watermark:
            type: constant
            value: false
        selected: false
        title: 无参考图
        type: video-generation
      height: 273
      id: '1778488520258'
      parentId: '1775586681775'
      position:
        x: 1334.0013199565165
        y: 647.7131878808834
      positionAbsolute:
        x: 8640.403109613408
        y: 1116.7131878808834
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    viewport:
      x: -2478.440047913025
      y: 20.55409847145637
      zoom: 0.8633395585744131