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

AI课件 - AIGC - 片尾曲生产入口

来源:/Users/ljn/Desktop/自动化搭建/AI生产线知识库/raw/old_dsl/AI课件 - AIGC - 片尾曲生产入口.yml

AI课件 - AIGC - 片尾曲生产入口

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

文件大小
79702 bytes
来源路径
/Users/ljn/Desktop/自动化搭建/AI生产线知识库/raw/old_dsl/AI课件 - AIGC - 片尾曲生产入口.yml
app:
  description: AI课件 - AIGC - 片尾曲生产入口
  icon: 🤖
  icon_background: '#E3E5E8'
  icon_type: emoji
  mode: workflow
  name: AI课件 - AIGC - 片尾曲生产入口
  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: start
        targetType: code
      id: 1773816706773-source-1773820241990-target
      source: '1773816706773'
      sourceHandle: source
      target: '1773820241990'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: code
      id: 1773820241990-source-1773820841661-target
      source: '1773820241990'
      sourceHandle: source
      target: '1773820841661'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1773820841661-source-1773821559278-target
      source: '1773820841661'
      sourceHandle: source
      target: '1773821559278'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: code
      id: 1773821559278-source-1773821583353-target
      source: '1773821559278'
      sourceHandle: source
      target: '1773821583353'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1773821583353-source-1773824094544-target
      source: '1773821583353'
      sourceHandle: source
      target: '1773824094544'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: code
      id: 1773824094544-source-1773824143580-target
      source: '1773824094544'
      sourceHandle: source
      target: '1773824143580'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1773824143580-source-1773826338168-target
      source: '1773824143580'
      sourceHandle: source
      target: '1773826338168'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: code
      id: 1773826338168-source-1773826563953-target
      source: '1773826338168'
      sourceHandle: source
      target: '1773826563953'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: tool
      id: 1773826563953-source-1773827411724-target
      source: '1773826563953'
      sourceHandle: source
      target: '1773827411724'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: tool
        targetType: end
      id: 1773827411724-source-1773824813141-target
      source: '1773827411724'
      sourceHandle: source
      target: '1773824813141'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: iteration
        targetType: llm
      id: 1773904007769-source-1773903860409-target
      source: '1773904007769'
      sourceHandle: source
      target: '1773903860409'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: true
        isInLoop: false
        iteration_id: '1773904007769'
        sourceType: iteration-start
        targetType: tool
      id: 1773904007769start-source-1773904041803-target
      source: 1773904007769start
      sourceHandle: source
      target: '1773904041803'
      targetHandle: target
      type: custom
      zIndex: 1002
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: llm
        targetType: code
      id: 1773903860409-source-1773904234772-target
      source: '1773903860409'
      sourceHandle: source
      target: '1773904234772'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: start
        targetType: if-else
      id: 1773816706773-source-1773905967062-target
      source: '1773816706773'
      sourceHandle: source
      target: '1773905967062'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: if-else
        targetType: iteration
      id: 1773905967062-true-1773904007769-target
      source: '1773905967062'
      sourceHandle: 'true'
      target: '1773904007769'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: if-else
        targetType: code
      id: 1773905967062-false-1773906025707-target
      source: '1773905967062'
      sourceHandle: 'false'
      target: '1773906025707'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: variable-aggregator
      id: 1773904234772-source-1773906072206-target
      source: '1773904234772'
      sourceHandle: source
      target: '1773906072206'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: code
        targetType: variable-aggregator
      id: 1773906025707-source-1773906072206-target
      source: '1773906025707'
      sourceHandle: source
      target: '1773906072206'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: variable-aggregator
        targetType: code
      id: 1773906072206-source-1773820841661-target
      source: '1773906072206'
      sourceHandle: source
      target: '1773820841661'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: start
        targetType: if-else
      id: 1773816706773-source-1773906147952-target
      source: '1773816706773'
      sourceHandle: source
      target: '1773906147952'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: if-else
        targetType: tool
      id: 1773906147952-true-1773905942059-target
      source: '1773906147952'
      sourceHandle: 'true'
      target: '1773905942059'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: tool
        targetType: llm
      id: 1773905942059-source-1773906244777-target
      source: '1773905942059'
      sourceHandle: source
      target: '1773906244777'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: llm
        targetType: code
      id: 1773906244777-source-1773906529735-target
      source: '1773906244777'
      sourceHandle: source
      target: '1773906529735'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: if-else
        targetType: code
      id: 1773906147952-false-1773906577314-target
      source: '1773906147952'
      sourceHandle: 'false'
      target: '1773906577314'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        isInLoop: false
        sourceType: code
        targetType: variable-aggregator
      id: 1773906529735-source-1773906619924-target
      source: '1773906529735'
      sourceHandle: source
      target: '1773906619924'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: code
        targetType: variable-aggregator
      id: 1773906577314-source-1773906619924-target
      source: '1773906577314'
      sourceHandle: source
      target: '1773906619924'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInLoop: false
        sourceType: variable-aggregator
        targetType: code
      id: 1773906619924-source-1773820841661-target
      source: '1773906619924'
      sourceHandle: source
      target: '1773820841661'
      targetHandle: target
      type: custom
      zIndex: 0
    nodes:
    - data:
        desc: ''
        selected: false
        title: 开始
        type: start
        variables:
        - label: session_id
          max_length: 200
          options: []
          required: false
          type: text-input
          variable: session_id
        - label: 项目名称(必填)
          max_length: 256
          options: []
          required: true
          type: text-input
          variable: project_name
        - label: 歌曲语言(默认:中文。可选:英文、日文、中英混合等)
          max_length: 200
          options: []
          required: false
          type: text-input
          variable: song_language
        - label: 演唱者性别(默认:由 AI 推断。可选:男 / 女)
          max_length: 50
          options: []
          required: false
          type: text-input
          variable: singer_gender
        - default: '16:9'
          label: 画面比例(默认:16:9。可选:9:16、1:1)
          max_length: 50
          options:
          - '16:9'
          - '21:9'
          - '3:2'
          - '4:3'
          - '1:1'
          - '3:4'
          - '2:3'
          - '9:16'
          required: false
          type: select
          variable: aspect_ratio
        - label: 主题与情感(必填)
          max_length: 20000
          options: []
          required: true
          type: paragraph
          variable: theme_and_emotion
        - label: 风格(默认:流行 Pop。可选:电子流行、民谣摇滚、Lo-fi Hip-hop、古风、R&B 等)
          max_length: 256
          options: []
          required: false
          type: text-input
          variable: music_style
        - label: 节奏感(默认:中速。可选:快/慢)
          max_length: 256
          options: []
          required: false
          type: text-input
          variable: music_tempo
        - label: 情绪关键词(默认:从主题与情感中推断。可选:忧伤、治愈、燃、梦幻、孤独、温暖等)
          max_length: 256
          options: []
          required: false
          type: text-input
          variable: music_emotion_keywords
        - label: 参考曲目(默认:不指定。如有可列出歌名和艺术家)
          max_length: 20000
          options: []
          required: false
          type: paragraph
          variable: music_reference_songs
        - label: 画面风格(默认:写实电影感。可选:赛博朋克、水墨风、动漫风、极简主义等)
          max_length: 256
          options: []
          required: false
          type: text-input
          variable: visual_style
        - label: 色调倾向(默认:自然色调。可选:冷色调蓝紫、暖色调橙黄、黑白对比、霓虹色彩等)
          max_length: 256
          options: []
          required: false
          type: text-input
          variable: visual_color_tone
        - label: 参考视觉(默认:不指定。如有可描述参考的 MV、电影、画作风格)
          max_length: 20000
          options: []
          required: false
          type: paragraph
          variable: visual_reference
        - label: 特殊要求
          max_length: 10000000000000000000
          options: []
          required: false
          type: paragraph
          variable: special_requirements
        - label: 参考图说明(#N,类型:锁定/参考,标签:xxx,说明:xxx;)
          max_length: 1000000000000000000
          options: []
          required: false
          type: paragraph
          variable: reference_image_description
        - allowed_file_extensions: []
          allowed_file_types:
          - image
          allowed_file_upload_methods:
          - local_file
          label: 参考图文件
          max_length: 6
          options: []
          required: false
          type: file-list
          variable: reference_image_files
        - allowed_file_extensions: []
          allowed_file_types:
          - image
          allowed_file_upload_methods:
          - local_file
          label: IP形象图
          max_length: 48
          options: []
          required: false
          type: file
          variable: ip_character_file
        - label: IP形象说明(类型:锁定/参考,名称:xxx,人设描述:xxx,年龄设定:xxx,出镜率:xx%)
          max_length: 100000000000000000
          options: []
          required: false
          type: paragraph
          variable: ip_character_description
      height: 532
      id: '1773816706773'
      position:
        x: 30
        y: 466
      positionAbsolute:
        x: 30
        y: 466
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "function main({ session_id }) {\n  let new_session_id = null;\n  if\
          \ (session_id) {\n    new_session_id = session_id;\n  } else {\n    // 当前时间(年月日时分秒)加上一个随机数,生成一个新的\
          \ session_id\n    const now = new Date();\n    const timestamp = now.getFullYear().toString()\
          \ + (now.getMonth() + 1).toString().padStart(2, '0') +\n      now.getDate().toString().padStart(2,\
          \ '0') +\n      now.getHours().toString().padStart(2, '0') +\n      now.getMinutes().toString().padStart(2,\
          \ '0') +\n      now.getSeconds().toString().padStart(2, '0');\n    const\
          \ randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');\n\
          \    new_session_id = `${timestamp}_${randomNum}`;\n  }\n\n  const projectKey\
          \ = \"mv_team\";\n\n  return {\n    session_id: new_session_id,\n    projectKey:\
          \ projectKey,\n  };\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          projectKey:
            children: null
            type: string
          session_id:
            children: null
            type: string
        selected: false
        title: 基础参数处理
        type: code
        variables:
        - value_selector:
          - '1773816706773'
          - session_id
          value_type: string
          variable: session_id
      height: 54
      id: '1773820241990'
      position:
        x: 2055
        y: 466
      positionAbsolute:
        x: 2055
        y: 466
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "function main({\n  session_id,\n  project_name,\n  song_language,\n\
          \  singer_gender,\n  aspect_ratio,\n  theme_and_emotion,\n  music_style,\n\
          \  music_tempo,\n  music_emotion_keywords,\n  music_reference_songs,\n \
          \ visual_style,\n  visual_color_tone,\n  visual_reference,\n  special_requirements,\n\
          \  reference_images,\n  ip_character,\n}) {\n  const payload = {\n    session_id,\n\
          \    phase: \"song\",\n    project_name,\n  };\n  if (song_language) {\n\
          \    payload.song_language = song_language;\n  }\n  if (singer_gender) {\n\
          \    payload.singer_gender = singer_gender;\n  }\n  if (aspect_ratio) {\n\
          \    payload.aspect_ratio = aspect_ratio;\n  }\n  if (theme_and_emotion)\
          \ {\n    payload.theme_and_emotion = theme_and_emotion;\n  }\n  if (music_style)\
          \ {\n    payload.music_style = music_style;\n  }\n  if (music_tempo) {\n\
          \    payload.music_tempo = music_tempo;\n  }\n  if (music_emotion_keywords)\
          \ {\n    payload.music_emotion_keywords = music_emotion_keywords;\n  }\n\
          \  if (music_reference_songs) {\n    payload.music_reference_songs = music_reference_songs;\n\
          \  }\n  if (visual_style) {\n    payload.visual_style = visual_style;\n\
          \  }\n  if (visual_color_tone) {\n    payload.visual_color_tone = visual_color_tone;\n\
          \  }\n  if (visual_reference) {\n    payload.visual_reference = visual_reference;\n\
          \  }\n  if (Array.isArray(reference_images) && reference_images.length >\
          \ 0) {\n    payload.reference_images = reference_images;\n  }\n  if (ip_character\
          \ && ip_character.url) {\n    payload.ip_character = ip_character;\n  }\n\
          \  if (special_requirements) {\n    payload.special_requirements = special_requirements;\n\
          \  }\n\n  return {\n    payload,\n    payload_str: JSON.stringify(payload),\n\
          \    timeoutMs: 40 * 60 * 1000, // 40分钟\n  };\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          payload:
            children: null
            type: object
          payload_str:
            children: null
            type: string
          timeoutMs:
            children: null
            type: number
        selected: false
        title: 第一阶段AI执行参数
        type: code
        variables:
        - value_selector:
          - '1773820241990'
          - session_id
          value_type: string
          variable: session_id
        - value_selector:
          - '1773816706773'
          - project_name
          value_type: string
          variable: project_name
        - value_selector:
          - '1773816706773'
          - song_language
          value_type: string
          variable: song_language
        - value_selector:
          - '1773816706773'
          - singer_gender
          value_type: string
          variable: singer_gender
        - value_selector:
          - '1773816706773'
          - aspect_ratio
          value_type: string
          variable: aspect_ratio
        - value_selector:
          - '1773816706773'
          - theme_and_emotion
          value_type: string
          variable: theme_and_emotion
        - value_selector:
          - '1773816706773'
          - music_style
          value_type: string
          variable: music_style
        - value_selector:
          - '1773816706773'
          - music_tempo
          value_type: string
          variable: music_tempo
        - value_selector:
          - '1773816706773'
          - music_emotion_keywords
          value_type: string
          variable: music_emotion_keywords
        - value_selector:
          - '1773816706773'
          - music_reference_songs
          value_type: string
          variable: music_reference_songs
        - value_selector:
          - '1773816706773'
          - visual_style
          value_type: string
          variable: visual_style
        - value_selector:
          - '1773816706773'
          - visual_color_tone
          value_type: string
          variable: visual_color_tone
        - value_selector:
          - '1773816706773'
          - visual_reference
          value_type: string
          variable: visual_reference
        - value_selector:
          - '1773816706773'
          - special_requirements
          value_type: string
          variable: special_requirements
        - value_selector:
          - '1773906072206'
          - output
          value_type: array[object]
          variable: reference_images
        - value_selector:
          - '1773906619924'
          - output
          value_type: object
          variable: ip_character
      height: 54
      id: '1773820841661'
      position:
        x: 2389
        y: 603
      positionAbsolute:
        x: 2389
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        is_team_authorization: true
        output_schema: null
        outputs:
        - type: object
          value_selector:
          - '1773815446902'
          - json_result
          value_type: object
          variable: json_result
        paramSchemas:
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: projectKey
            ja_JP: projectKey
            pt_BR: projectKey
            zh_Hans: projectKey
          llm_description: ''
          max: null
          min: null
          name: projectKey
          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: bizId
          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: idempotencyKey
          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: prompt
            ja_JP: prompt
            pt_BR: prompt
            zh_Hans: prompt
          llm_description: ''
          max: null
          min: null
          name: prompt
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: payload
            ja_JP: payload
            pt_BR: payload
            zh_Hans: payload
          llm_description: ''
          max: null
          min: null
          name: payload
          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: assets
            ja_JP: assets
            pt_BR: assets
            zh_Hans: assets
          llm_description: ''
          max: null
          min: null
          name: assets
          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: timeoutMs
            ja_JP: timeoutMs
            pt_BR: timeoutMs
            zh_Hans: timeoutMs
          llm_description: ''
          max: null
          min: null
          name: timeoutMs
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: number
        params:
          assets: ''
          bizId: ''
          idempotencyKey: ''
          payload: ''
          projectKey: ''
          prompt: ''
          timeoutMs: ''
        provider_id: 07bcb809-11aa-4339-a9e8-496225d02783
        provider_name: AI课件-AIGC-TEAM
        provider_type: workflow
        retry_config:
          max_retries: 1
          retry_enabled: true
          retry_interval: 1000
        selected: true
        title: 第一阶段-AIGC-TEAM
        tool_configurations: {}
        tool_description: "AIGC-TEAM任务接口调用\n\n字段说明:\n\n- projectKey:必填\n- bizId:可选,可为\
          \ null\n- idempotencyKey:可选;如果同一个 projectKey 下已存在相同 idempotencyKey 的任务,则直接返回旧任务,不会重复创建\n\
          - prompt:可选,可为 null\n- payload:可选,键值对象\n- assets:可选,AssetItem 数组。每个元素包含:\n\
          \  - type:必填,`image` 或 `document`\n  - url:必填,资源的 HTTP/HTTPS URL\n  - name:可选,资源名称(仅用于标识)\n\
          \  \n  assets 会在 transform 阶段按 type 拆分为 `images` 和 `documents` URL 数组,传递给\
          \ ai-code 下载到工作区供 Agent 使用。若 transform 未处理 assets,系统会发出 warn 级别事件提醒。\n-\
          \ timeoutMs:可选,正整数或 null;当项目 transform 未返回 timeoutMs 时,此值会作为任务执行超时\n- executionMode:可选,work\
          \ 或 workStream"
        tool_label: AI课件-AIGC-TEAM
        tool_name: aic_aigc_team
        tool_node_version: '2'
        tool_parameters:
          assets:
            type: mixed
            value: null
          bizId:
            type: mixed
            value: '{{#1773820241990.session_id#}}'
          idempotencyKey:
            type: mixed
            value: null
          payload:
            type: mixed
            value: '{{#1773820841661.payload_str#}}'
          projectKey:
            type: mixed
            value: '{{#1773820241990.projectKey#}}'
          prompt:
            type: mixed
            value: null
          timeoutMs:
            type: variable
            value:
            - '1773820841661'
            - timeoutMs
        type: tool
      height: 124
      id: '1773821559278'
      position:
        x: 2723
        y: 603
      positionAbsolute:
        x: 2723
        y: 603
      selected: true
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "function main({ json_result }) {\n  let result = null;\n  let error\
          \ = null;\n  if (json_result && json_result.result) {\n    result = json_result.result;\n\
          \  }\n\n  if (!result) {\n    error = \"Result is null or undefined.\";\n\
          \  } else {\n    if (result.error) {\n      error = result.error;\n    }\n\
          \  }\n\n\n  if (error) {\n    throw new Error(error);\n  }\n\n  const {\n\
          \    output,\n    resultPackageUrl,\n  } = result;\n\n  if (!output) {\n\
          \    error = \"Output is null or undefined.\";\n  }\n  if (!resultPackageUrl)\
          \ {\n    error = (error ? error + \", \" : \"\") + \"Result package URL\
          \ is null or undefined.\";\n  }\n\n  if (error) {\n    throw new Error(error);\n\
          \  }\n\n  return {\n    phase1_output: output,\n    phase1_output_str: JSON.stringify(output),\n\
          \    phase1_result_package_url: resultPackageUrl,\n  };\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          phase1_output:
            children: null
            type: object
          phase1_output_str:
            children: null
            type: string
          phase1_result_package_url:
            children: null
            type: string
        selected: false
        title: 第一阶段结果处理
        type: code
        variables:
        - value_selector:
          - '1773821559278'
          - json_result
          value_type: object
          variable: json_result
      height: 54
      id: '1773821583353'
      position:
        x: 3057
        y: 603
      positionAbsolute:
        x: 3057
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        is_team_authorization: true
        output_schema: null
        outputs:
        - type: string
          value_selector:
          - '1773216146094'
          - phase2_input
          value_type: string
          variable: phase2_input
        - type: string
          value_selector:
          - '1773214662729'
          - json
          value_type: string
          variable: timeline
        - type: string
          value_selector:
          - '1773212909752'
          - url
          value_type: string
          variable: url
        - type: object
          value_selector:
          - '1773214662729'
          - timeline
          value_type: object
          variable: timeline_obj
        paramSchemas:
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 第一阶段产出JSON
            ja_JP: 第一阶段产出JSON
            pt_BR: 第一阶段产出JSON
            zh_Hans: 第一阶段产出JSON
          llm_description: ''
          max: null
          min: null
          name: phase1_output_json
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          scope: null
          template: null
          type: string
        params:
          phase1_output_json: ''
        provider_id: 7c6af460-c278-49dc-a7be-7575802da0e0
        provider_name: AI课件 - AIGC - 片尾曲歌曲制作阶段
        provider_type: workflow
        selected: false
        title: AI课件 - AIGC - 片尾曲歌曲制作阶段
        tool_configurations: {}
        tool_description: AI课件 - AIGC - 片尾曲歌曲制作阶段
        tool_label: AI课件 - AIGC - 片尾曲歌曲制作阶段
        tool_name: aic_aigc_ending_song_phase2
        tool_node_version: '2'
        tool_parameters:
          phase1_output_json:
            type: mixed
            value: '{{#1773821583353.phase1_output_str#}}'
        type: tool
      height: 94
      id: '1773824094544'
      position:
        x: 3391
        y: 603
      positionAbsolute:
        x: 3391
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "function main({ session_id, phase2_input, url, timeline_obj, phase1_result_package_url\
          \ }) {\n  const payload = {\n    session_id,\n    phase: \"mv\",\n    song_url:\
          \ url,\n    phase1_result_package_url,\n    timeline: timeline_obj,\n  }\n\
          \n  return {\n    prompt: phase2_input,\n    payload,\n    payload_str:\
          \ JSON.stringify(payload),\n    timeoutMs: 2.5 * 60 * 60 * 1000, // 2.5小时\n\
          \  };\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          payload:
            children: null
            type: object
          payload_str:
            children: null
            type: string
          prompt:
            children: null
            type: string
          timeoutMs:
            children: null
            type: number
        selected: false
        title: 第二阶段AI执行参数
        type: code
        variables:
        - value_selector:
          - '1773820241990'
          - session_id
          value_type: string
          variable: session_id
        - value_selector:
          - '1773824094544'
          - phase2_input
          value_type: string
          variable: phase2_input
        - value_selector:
          - '1773824094544'
          - url
          value_type: string
          variable: url
        - value_selector:
          - '1773824094544'
          - timeline_obj
          value_type: object
          variable: timeline_obj
        - value_selector:
          - '1773821583353'
          - phase1_result_package_url
          value_type: string
          variable: phase1_result_package_url
      height: 54
      id: '1773824143580'
      position:
        x: 3725
        y: 603
      positionAbsolute:
        x: 3725
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        outputs:
        - value_selector:
          - '1773827411724'
          - url
          value_type: string
          variable: url
        - value_selector:
          - '1773827411724'
          - storyboards
          value_type: array[object]
          variable: storyboards
        selected: false
        title: 结束
        type: end
      height: 116
      id: '1773824813141'
      position:
        x: 5061
        y: 603
      positionAbsolute:
        x: 5061
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        is_team_authorization: true
        output_schema: null
        outputs:
        - type: object
          value_selector:
          - '1773815446902'
          - json_result
          value_type: object
          variable: json_result
        paramSchemas:
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: projectKey
            ja_JP: projectKey
            pt_BR: projectKey
            zh_Hans: projectKey
          llm_description: ''
          max: null
          min: null
          name: projectKey
          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: bizId
          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: idempotencyKey
          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: prompt
            ja_JP: prompt
            pt_BR: prompt
            zh_Hans: prompt
          llm_description: ''
          max: null
          min: null
          name: prompt
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: string
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: payload
            ja_JP: payload
            pt_BR: payload
            zh_Hans: payload
          llm_description: ''
          max: null
          min: null
          name: payload
          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: assets
            ja_JP: assets
            pt_BR: assets
            zh_Hans: assets
          llm_description: ''
          max: null
          min: null
          name: assets
          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: timeoutMs
            ja_JP: timeoutMs
            pt_BR: timeoutMs
            zh_Hans: timeoutMs
          llm_description: ''
          max: null
          min: null
          name: timeoutMs
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: number
        params:
          assets: ''
          bizId: ''
          idempotencyKey: ''
          payload: ''
          projectKey: ''
          prompt: ''
          timeoutMs: ''
        provider_id: 07bcb809-11aa-4339-a9e8-496225d02783
        provider_name: AI课件-AIGC-TEAM
        provider_type: workflow
        retry_config:
          max_retries: 1
          retry_enabled: true
          retry_interval: 1000
        selected: false
        title: 第二阶段-AIGC-TEAM
        tool_configurations: {}
        tool_description: "AIGC-TEAM任务接口调用\n\n字段说明:\n\n- projectKey:必填\n- bizId:可选,可为\
          \ null\n- idempotencyKey:可选;如果同一个 projectKey 下已存在相同 idempotencyKey 的任务,则直接返回旧任务,不会重复创建\n\
          - prompt:可选,可为 null\n- payload:可选,键值对象\n- assets:可选,AssetItem 数组。每个元素包含:\n\
          \  - type:必填,`image` 或 `document`\n  - url:必填,资源的 HTTP/HTTPS URL\n  - name:可选,资源名称(仅用于标识)\n\
          \  \n  assets 会在 transform 阶段按 type 拆分为 `images` 和 `documents` URL 数组,传递给\
          \ ai-code 下载到工作区供 Agent 使用。若 transform 未处理 assets,系统会发出 warn 级别事件提醒。\n-\
          \ timeoutMs:可选,正整数或 null;当项目 transform 未返回 timeoutMs 时,此值会作为任务执行超时\n- executionMode:可选,work\
          \ 或 workStream"
        tool_label: AI课件-AIGC-TEAM
        tool_name: aic_aigc_team
        tool_node_version: '2'
        tool_parameters:
          assets:
            type: mixed
            value: null
          bizId:
            type: mixed
            value: '{{#1773820241990.session_id#}}'
          idempotencyKey:
            type: mixed
            value: null
          payload:
            type: mixed
            value: '{{#1773824143580.payload_str#}}'
          projectKey:
            type: mixed
            value: '{{#1773820241990.projectKey#}}'
          prompt:
            type: mixed
            value: '{{#1773824143580.prompt#}}'
          timeoutMs:
            type: variable
            value:
            - '1773824143580'
            - timeoutMs
        type: tool
      height: 124
      id: '1773826338168'
      position:
        x: 4059
        y: 603
      positionAbsolute:
        x: 4059
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "function main({ json_result }) {\n  let result = null;\n  let error\
          \ = null;\n  if (json_result && json_result.result) {\n    result = json_result.result;\n\
          \  }\n\n  if (!result) {\n    error = \"Result is null or undefined.\";\n\
          \  } else {\n    if (result.error) {\n      error = result.error;\n    }\n\
          \  }\n\n\n  if (error) {\n    throw new Error(error);\n  }\n\n  const {\n\
          \    output,\n    resultPackageUrl,\n  } = result;\n\n  if (!output) {\n\
          \    error = \"Output is null or undefined.\";\n  }\n  if (!resultPackageUrl)\
          \ {\n    error = (error ? error + \", \" : \"\") + \"Result package URL\
          \ is null or undefined.\";\n  }\n\n  if (error) {\n    throw new Error(error);\n\
          \  }\n\n  return {\n    phase2_output: output,\n    phase2_output_str: JSON.stringify(output),\n\
          \    phase2_result_package_url: resultPackageUrl,\n  };\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          phase2_output:
            children: null
            type: object
          phase2_output_str:
            children: null
            type: string
          phase2_result_package_url:
            children: null
            type: string
        selected: false
        title: 第二阶段结果处理
        type: code
        variables:
        - value_selector:
          - '1773826338168'
          - json_result
          value_type: object
          variable: json_result
      height: 54
      id: '1773826563953'
      position:
        x: 4393
        y: 603
      positionAbsolute:
        x: 4393
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        is_team_authorization: true
        output_schema: null
        outputs:
        - type: string
          value_selector:
          - '1773219360493'
          - url
          value_type: string
          variable: url
        - type: array[object]
          value_selector:
          - '1773147042506'
          - output
          value_type: array[object]
          variable: storyboards
        paramSchemas:
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: JSON
            ja_JP: JSON
            pt_BR: JSON
            zh_Hans: JSON
          llm_description: ''
          max: null
          min: null
          name: JSON
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          scope: null
          template: null
          type: string
        - auto_generate: null
          default: '3.5'
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: jimeng_version
            ja_JP: jimeng_version
            pt_BR: jimeng_version
            zh_Hans: jimeng_version
          llm_description: ''
          max: null
          min: null
          name: jimeng_version
          options:
          - icon: null
            label:
              en_US: '3.5'
              ja_JP: '3.5'
              pt_BR: '3.5'
              zh_Hans: '3.5'
            value: '3.5'
          - icon: null
            label:
              en_US: '3.0'
              ja_JP: '3.0'
              pt_BR: '3.0'
              zh_Hans: '3.0'
            value: '3.0'
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          scope: null
          template: null
          type: select
        params:
          JSON: ''
          jimeng_version: ''
        provider_id: dcaef937-21e7-439d-afb0-ad2179cbe7f3
        provider_name: AI课件 - AIGC - 片尾曲MV制作阶段
        provider_type: workflow
        selected: false
        title: AI课件 - AIGC - 片尾曲MV制作阶段
        tool_configurations: {}
        tool_description: AI课件 - AIGC - 片尾曲MV制作阶段
        tool_label: AI课件 - AIGC - 片尾曲MV制作阶段
        tool_name: aic_aigc_ending_song_mv
        tool_node_version: '2'
        tool_parameters:
          JSON:
            type: mixed
            value: '{{#1773826563953.phase2_output_str#}}'
          aspect_ratio:
            type: variable
            value:
            - '1773816706773'
            - aspect_ratio
          jimeng_version:
            type: constant
            value: '3.5'
        type: tool
      height: 94
      id: '1773827411724'
      position:
        x: 4727
        y: 603
      positionAbsolute:
        x: 4727
        y: 603
      selected: false
      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:
            max_completion_tokens: 128000
          mode: chat
          name: gpt-5.4-2026-03-05
          provider: aict/ai_hub/ai_hub
        prompt_template:
        - id: 2f6d856b-69e0-46a1-a916-4821f9d20af2
          role: system
          text: "你是一个参考图数据解析器。将用户的「参考图说明文本」与「图片URL列表」合并为结构化 JSON 数组。\n\n## 输入\n\n\
            1. **参考图说明**(字符串):用户对每张图的描述。标准格式为 `#N,类型:锁定/参考,标签:xxx,说明:xxx`,多张图用分号或换行分隔。\n\
            2. **图片URL列表**(字符串数组):有序的图片地址,`#1` 对应第一个 URL,`#2` 对应第二个,依此类推。\n\n## 输出\n\
            \n严格只输出一个 JSON 数组,不要有任何其他文字。每个元素:\n\n```json\n{\"url\": \"图片URL\", \"\
            type\": \"reference 或 locked\", \"label\": \"标签\", \"usage\": \"说明\"}\n\
            ```\n\n## 解析规则\n\n### 标准格式(优先按此解析)\n\n```\n#1,类型:锁定,标签:女主角,说明:确保人物外貌一致;#2,类型:参考,标签:暖色氛围,说明:色调参考\n\
            ```\n\n按 `#N` 分块,每块提取「类型」「标签」「说明」三个键值对。\n\n### 字段映射\n\n| 字段 | 键名识别 | 值映射\
            \ | 默认值 |\n|------|---------|--------|--------|\n| type | `类型` | `参考`\
            \ → `\"reference\"`;`锁定` → `\"locked\"` | `\"reference\"` |\n| label |\
            \ `标签` | 原文 | `\"图N\"` |\n| usage | `说明` | 原文 | `\"\"` |\n\n### 容错处理\n\
            \n用户输入可能偏离标准格式,需兼容以下情况:\n\n- **序号变体**:`#1` / `第1张` / `第一张图` / `图1` / `1.`\
            \ / `1、` 等均视为第 1 张图\n- **中文数字**:一二三…转为 1 2 3…\n- **标点混用**:中英文逗号(`,` `,`)、分号(`;`\
            \ `;`)、冒号(`:` `:`)互通\n- **字段缺失**:未写的字段用默认值补全\n- **字段顺序不固定**:如 `#1,标签:女主角,类型:锁定,说明:...`\
            \ 也合法\n- **口语化**:如 `第一张是女主角,锁定,确保一致`,需推断 label 和 usage\n- **无序号分段**:无明确序号时按出现顺序依次对应第\
            \ 1、2、3… 张图\n\n### 通用规则\n\n1. 若说明中图片数少于 URL 列表,未描述的图片补默认值。\n2. 忽略序号超出\
            \ URL 列表范围的描述。\n3. 输出顺序与 URL 列表一致。\n4. 若说明为空或无法解析,所有图片均用默认值。\n\n## 示例\n\
            \n### 示例1:标准格式\n\n**输入:**\n\n- 说明:`#1,类型:锁定,标签:女主角,说明:所有出现女主角的分镜都用此图确保人物外貌一致;#2,类型:参考,标签:暖色氛围,说明:整体色调参考这张图的暖黄色氛围`\n\
            - URL列表:`[\"https://a.com/1.jpg\", \"https://a.com/2.jpg\"]`\n\n**输出:**\n\
            \n```json\n[\n  {\"url\": \"https://a.com/1.jpg\", \"type\": \"locked\"\
            , \"label\": \"女主角\", \"usage\": \"所有出现女主角的分镜都用此图确保人物外貌一致\"},\n  {\"url\"\
            : \"https://a.com/2.jpg\", \"type\": \"reference\", \"label\": \"暖色氛围\"\
            , \"usage\": \"整体色调参考这张图的暖黄色氛围\"}\n]\n```\n\n### 示例2:字段缺失 + 部分图片无说明\n\n\
            **输入:**\n\n- 说明:`#1,类型:锁定,标签:女主角;#2,标签:暖色氛围`\n- URL列表:`[\"https://a.com/1.jpg\"\
            , \"https://a.com/2.jpg\", \"https://a.com/3.jpg\"]`\n\n**输出:**\n\n```json\n\
            [\n  {\"url\": \"https://a.com/1.jpg\", \"type\": \"locked\", \"label\"\
            : \"女主角\", \"usage\": \"\"},\n  {\"url\": \"https://a.com/2.jpg\", \"\
            type\": \"reference\", \"label\": \"暖色氛围\", \"usage\": \"\"},\n  {\"url\"\
            : \"https://a.com/3.jpg\", \"type\": \"reference\", \"label\": \"图3\"\
            , \"usage\": \"\"}\n]\n```\n\n### 示例3:口语化输入\n\n**输入:**\n\n- 说明:`第一张图是女主角的脸,锁定,所有分镜要保持一致。第二张是参考氛围用的,暖色调`\n\
            - URL列表:`[\"https://a.com/1.jpg\", \"https://a.com/2.jpg\"]`\n\n**输出:**\n\
            \n```json\n[\n  {\"url\": \"https://a.com/1.jpg\", \"type\": \"locked\"\
            , \"label\": \"女主角\", \"usage\": \"所有分镜要保持一致\"},\n  {\"url\": \"https://a.com/2.jpg\"\
            , \"type\": \"reference\", \"label\": \"暖色氛围\", \"usage\": \"暖色调\"}\n\
            ]\n```"
        - id: 89324d16-9efa-4fa2-a5d8-b24c2d5c7fb4
          role: user
          text: '现在请处理以下输入:


            **参考图说明:**

            {{#1773816706773.reference_image_description#}}


            **图片URL列表:**

            {{#1773904007769.output#}}'
        selected: false
        title: 解析参考图LLM
        type: llm
        variables: []
        video:
          configs:
            variable_selector: []
          enabled: false
        vision:
          enabled: false
      height: 122
      id: '1773903860409'
      position:
        x: 1387
        y: 603
      positionAbsolute:
        x: 1387
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        error_handle_mode: terminated
        height: 214
        is_parallel: false
        iterator_input_type: array[file]
        iterator_selector:
        - '1773816706773'
        - reference_image_files
        output_selector:
        - '1773904041803'
        - url
        output_type: array[string]
        parallel_nums: 10
        selected: false
        start_node_id: 1773904007769start
        title: 遍历
        type: iteration
        width: 508
      height: 214
      id: '1773904007769'
      position:
        x: 789
        y: 603
      positionAbsolute:
        x: 789
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 508
      zIndex: 1
    - data:
        desc: ''
        isInIteration: true
        selected: false
        title: ''
        type: iteration-start
      draggable: false
      height: 48
      id: 1773904007769start
      parentId: '1773904007769'
      position:
        x: 60
        y: 83
      positionAbsolute:
        x: 849
        y: 686
      selectable: false
      sourcePosition: right
      targetPosition: left
      type: custom-iteration-start
      width: 44
      zIndex: 1002
    - data:
        desc: ''
        isInIteration: true
        isInLoop: false
        is_team_authorization: true
        iteration_id: '1773904007769'
        output_schema: null
        outputs:
        - type: string
          value_selector:
          - '1772431478571'
          - url
          value_type: string
          variable: url
        paramSchemas:
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 资源地址
            ja_JP: 资源地址
            pt_BR: 资源地址
            zh_Hans: 资源地址
          llm_description: ''
          max: null
          min: null
          name: url
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          scope: null
          template: null
          type: string
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 资源类型
            ja_JP: 资源类型
            pt_BR: 资源类型
            zh_Hans: 资源类型
          llm_description: ''
          max: null
          min: null
          name: type
          options:
          - icon: null
            label:
              en_US: jpg/image
              ja_JP: jpg/image
              pt_BR: jpg/image
              zh_Hans: jpg/image
            value: jpg/image
          - icon: null
            label:
              en_US: mp4/video
              ja_JP: mp4/video
              pt_BR: mp4/video
              zh_Hans: mp4/video
            value: mp4/video
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          scope: null
          template: null
          type: select
        - auto_generate: null
          default: 'false'
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 资源是否传cs
            ja_JP: 资源是否传cs
            pt_BR: 资源是否传cs
            zh_Hans: 资源是否传cs
          llm_description: ''
          max: null
          min: null
          name: isCs
          options:
          - icon: null
            label:
              en_US: 'true'
              ja_JP: 'true'
              pt_BR: 'true'
              zh_Hans: 'true'
            value: 'true'
          - icon: null
            label:
              en_US: 'false'
              ja_JP: 'false'
              pt_BR: 'false'
              zh_Hans: 'false'
            value: 'false'
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: select
        - auto_generate: null
          default: 是
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 是否返回CDN地址(默认:是)
            ja_JP: 是否返回CDN地址(默认:是)
            pt_BR: 是否返回CDN地址(默认:是)
            zh_Hans: 是否返回CDN地址(默认:是)
          llm_description: ''
          max: null
          min: null
          name: isCdn
          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:
          isCdn: ''
          isCs: ''
          type: ''
          url: ''
        provider_id: 8e9ef31b-83d5-4a5a-a717-1e7d86250a62
        provider_name: AI课件-资源转存
        provider_type: workflow
        selected: false
        title: 参考图-资源转存
        tool_configurations: {}
        tool_description: 把外网的资源转存的ndr上
        tool_label: AI课件-资源转存
        tool_name: aic_resource_storage
        tool_node_version: '2'
        tool_parameters:
          isCdn:
            type: constant
            value: 否
          isCs:
            type: constant
            value: 'true'
          type:
            type: constant
            value: jpg/image
          url:
            type: mixed
            value: '{{#1773904007769.item.url#}}'
        type: tool
      height: 94
      id: '1773904041803'
      parentId: '1773904007769'
      position:
        x: 204
        y: 60
      positionAbsolute:
        x: 993
        y: 663
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
      zIndex: 1002
    - data:
        code: "function main({ llm_result }) {\n  let format_llm_result = llm_result;\n\
          \  if (format_llm_result.indexOf(\"```json\") >= 0) {\n    // 深度思考结果\n \
          \   // 取出json代码块\n    const startIndex = format_llm_result.indexOf(\"```json\"\
          );\n    const endIndex = format_llm_result.indexOf(\"```\", startIndex +\
          \ 7);\n    if (startIndex >= 0 && endIndex > startIndex) {\n      // 提取json字符串\n\
          \      format_llm_result = format_llm_result.substring(startIndex + 7, endIndex);\n\
          \      // 去掉代码块的换行(\\r\\n)\n      format_llm_result = format_llm_result.replace(/[\\\
          r\\n]/g, \"\");\n    }\n  }\n\n  const parseResult = JSON.parse(format_llm_result);\n\
          \  return {\n    reference_images: parseResult,\n  };\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          reference_images:
            children: null
            type: array[object]
        selected: false
        title: 解析参考图结果处理
        type: code
        variables:
        - value_selector:
          - '1773903860409'
          - text
          value_type: string
          variable: llm_result
      height: 54
      id: '1773904234772'
      position:
        x: 1721
        y: 603
      positionAbsolute:
        x: 1721
        y: 603
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        is_team_authorization: true
        output_schema: null
        outputs:
        - type: string
          value_selector:
          - '1772431478571'
          - url
          value_type: string
          variable: url
        paramSchemas:
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 资源地址
            ja_JP: 资源地址
            pt_BR: 资源地址
            zh_Hans: 资源地址
          llm_description: ''
          max: null
          min: null
          name: url
          options: []
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          scope: null
          template: null
          type: string
        - auto_generate: null
          default: null
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 资源类型
            ja_JP: 资源类型
            pt_BR: 资源类型
            zh_Hans: 资源类型
          llm_description: ''
          max: null
          min: null
          name: type
          options:
          - icon: null
            label:
              en_US: jpg/image
              ja_JP: jpg/image
              pt_BR: jpg/image
              zh_Hans: jpg/image
            value: jpg/image
          - icon: null
            label:
              en_US: mp4/video
              ja_JP: mp4/video
              pt_BR: mp4/video
              zh_Hans: mp4/video
            value: mp4/video
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: true
          scope: null
          template: null
          type: select
        - auto_generate: null
          default: 'false'
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 资源是否传cs
            ja_JP: 资源是否传cs
            pt_BR: 资源是否传cs
            zh_Hans: 资源是否传cs
          llm_description: ''
          max: null
          min: null
          name: isCs
          options:
          - icon: null
            label:
              en_US: 'true'
              ja_JP: 'true'
              pt_BR: 'true'
              zh_Hans: 'true'
            value: 'true'
          - icon: null
            label:
              en_US: 'false'
              ja_JP: 'false'
              pt_BR: 'false'
              zh_Hans: 'false'
            value: 'false'
          placeholder:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          precision: null
          required: false
          scope: null
          template: null
          type: select
        - auto_generate: null
          default: 是
          form: llm
          human_description:
            en_US: ''
            ja_JP: ''
            pt_BR: ''
            zh_Hans: ''
          label:
            en_US: 是否返回CDN地址(默认:是)
            ja_JP: 是否返回CDN地址(默认:是)
            pt_BR: 是否返回CDN地址(默认:是)
            zh_Hans: 是否返回CDN地址(默认:是)
          llm_description: ''
          max: null
          min: null
          name: isCdn
          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:
          isCdn: ''
          isCs: ''
          type: ''
          url: ''
        provider_id: 8e9ef31b-83d5-4a5a-a717-1e7d86250a62
        provider_name: AI课件-资源转存
        provider_type: workflow
        selected: false
        title: IP形象图-资源转存
        tool_configurations: {}
        tool_description: 把外网的资源转存的ndr上
        tool_label: AI课件-资源转存
        tool_name: aic_resource_storage
        tool_node_version: '2'
        tool_parameters:
          isCdn:
            type: constant
            value: 否
          isCs:
            type: constant
            value: 'true'
          type:
            type: constant
            value: jpg/image
          url:
            type: mixed
            value: '{{#1773816706773.ip_character_file.url#}}'
        type: tool
      height: 94
      id: '1773905942059'
      position:
        x: 921
        y: 991
      positionAbsolute:
        x: 921
        y: 991
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        cases:
        - case_id: 'true'
          conditions:
          - comparison_operator: not empty
            id: 4cad36a9-734e-42b1-973a-32cf99ee3219
            value: ''
            varType: array[file]
            variable_selector:
            - '1773816706773'
            - reference_image_files
          id: 'true'
          logical_operator: and
        desc: ''
        selected: false
        title: 是否有参考图
        type: if-else
      height: 126
      id: '1773905967062'
      position:
        x: 364
        y: 780
      positionAbsolute:
        x: 364
        y: 780
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main() {\n    return {\n        reference_images: []\n \
          \   }\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          reference_images:
            children: null
            type: array[object]
        selected: false
        title: 无参考图空数据
        type: code
        variables: []
      height: 54
      id: '1773906025707'
      position:
        x: 1721
        y: 800
      positionAbsolute:
        x: 1721
        y: 800
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        output_type: array[object]
        selected: false
        title: 参考图聚合
        type: variable-aggregator
        variables:
        - - '1773904234772'
          - reference_images
        - - '1773906025707'
          - reference_images
      height: 136
      id: '1773906072206'
      position:
        x: 2055
        y: 562
      positionAbsolute:
        x: 2055
        y: 562
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        cases:
        - case_id: 'true'
          conditions:
          - comparison_operator: not empty
            id: 3fccb584-751c-4788-9837-ce1a72c45a8b
            value: ''
            varType: file
            variable_selector:
            - '1773816706773'
            - ip_character_file
            - url
          id: 'true'
          logical_operator: and
        desc: ''
        selected: false
        title: 是否有IP形象图
        type: if-else
      height: 126
      id: '1773906147952'
      position:
        x: 364
        y: 1062
      positionAbsolute:
        x: 364
        y: 1062
      selected: false
      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:
            max_completion_tokens: 128000
          mode: chat
          name: gpt-5.4-2026-03-05
          provider: aict/ai_hub/ai_hub
        prompt_template:
        - id: 26a76d3a-4479-4e05-8e38-d3e7d74fcfd4
          role: system
          text: "你是一个 IP 形象数据解析器。将用户的「IP 形象说明文本」与「IP 形象图片 URL」合并为结构化 JSON 对象。当前版本仅支持\
            \ 1 个 IP 形象。\n\n## 输入\n\n1. **IP 形象说明**(字符串):用户对 IP 角色的描述。标准格式为 `类型:锁定/参考,名称:xxx,人设描述:xxx,年龄设定:xxx,出镜率:xx%`,字段之间用逗号或分号分隔。\n\
            2. **IP 形象图片 URL**(字符串):IP 角色的图片地址。\n\n## 输出\n\n严格只输出一个 JSON 对象,不要有任何其他文字:\n\
            \n```json\n{\n  \"url\": \"图片URL\",\n  \"type\": \"reference 或 locked\"\
            ,\n  \"name\": \"IP 名称\",\n  \"characterDescription\": \"人设描述\",\n  \"\
            ageSetting\": \"年龄设定\",\n  \"screenRatio\": 50\n}\n```\n\n## 解析规则\n\n\
            ### 标准格式(优先按此解析)\n\n```\n类型:锁定,名称:星际猫咪 Momo,人设描述:一只穿着宇航服的橘猫,性格好奇又勇敢,出镜率:60%\n\
            ```\n\n提取「类型」「名称」「人设描述」「年龄设定」「出镜率」五个键值对。\n\n### 字段映射\n\n| 字段 | 键名识别 |\
            \ 值映射 | 默认值 |\n|------|---------|--------|--------|\n| type | `类型` | `参考`\
            \ → `\"reference\"`;`锁定` → `\"locked\"` | `\"locked\"` |\n| name | `名称`、`名字`、`角色名`\
            \ | 原文 | `\"IP角色\"` |\n| characterDescription | `人设描述`、`人设`、`描述`、`角色描述`、`性格`\
            \ | 原文 | `\"\"` |\n| ageSetting | `年龄设定`、`年龄`、`体型` | 原文 | `\"不限\"` |\n\
            | screenRatio | `出镜率`、`出镜`、`占比` | 提取数字(去掉%),范围 20-80 | `50` |\n\n### 类型说明\n\
            \n- **参考**(`reference`):使用图中 IP 对象,但用 MV 目标画风重新渲染(如 3D→2D 风格转换)\n- **锁定**(`locked`):直接使用图中\
            \ IP 对象并保留原图风格(适合品牌 IP 必须原样呈现的场景)\n\n### 容错处理\n\n- **标点混用**:中英文逗号(`,`\
            \ `,`)、分号(`;` `;`)、冒号(`:` `:`)互通\n- **字段缺失**:未写的字段用默认值补全\n- **字段顺序不固定**:如\
            \ `名称:Momo,类型:锁定,人设描述:...` 也合法\n- **出镜率格式**:`60%` / `60` / `百分之六十` / `六十`\
            \ 均识别为 60;超出 20-80 范围则钳位到最近边界\n- **口语化**:如 `锁定,叫星际猫咪,是一只穿宇航服的橘猫,出镜60%`,需推断各字段\n\
            \n### 通用规则\n\n1. 若说明为空或无法解析,所有字段使用默认值。\n2. `screenRatio` 必须为 20-80 之间的整数。\n\
            \n## 示例\n\n### 示例1:标准格式\n\n**输入:**\n\n- 说明:`类型:锁定,名称:星际猫咪 Momo,人设描述:一只穿着宇航服的橘猫,性格好奇又勇敢,总是率先探索未知领域,年龄设定:成年体,出镜率:60%`\n\
            - 图片URL:`\"https://a.com/momo.png\"`\n\n**输出:**\n\n```json\n{\n  \"url\"\
            : \"https://a.com/momo.png\",\n  \"type\": \"locked\",\n  \"name\": \"\
            星际猫咪 Momo\",\n  \"characterDescription\": \"一只穿着宇航服的橘猫,性格好奇又勇敢,总是率先探索未知领域\"\
            ,\n  \"ageSetting\": \"成年体\",\n  \"screenRatio\": 60\n}\n```\n\n### 示例2:字段缺失\n\
            \n**输入:**\n\n- 说明:`名称:小火苗,类型:参考,人设描述:品牌吉祥物,活泼可爱`\n- 图片URL:`\"https://a.com/flame.png\"\
            `\n\n**输出:**\n\n```json\n{\n  \"url\": \"https://a.com/flame.png\",\n\
            \  \"type\": \"reference\",\n  \"name\": \"小火苗\",\n  \"characterDescription\"\
            : \"品牌吉祥物,活泼可爱\",\n  \"ageSetting\": \"不限\",\n  \"screenRatio\": 50\n\
            }\n```\n\n### 示例3:口语化输入\n\n**输入:**\n\n- 说明:`锁定风格,角色叫妙妙,是个粉色猫咪精灵,幼年体,出镜要多一些大概70%`\n\
            - 图片URL:`\"https://a.com/miaomiao.png\"`\n\n**输出:**\n\n```json\n{\n  \"\
            url\": \"https://a.com/miaomiao.png\",\n  \"type\": \"locked\",\n  \"\
            name\": \"妙妙\",\n  \"characterDescription\": \"粉色猫咪精灵\",\n  \"ageSetting\"\
            : \"幼年体\",\n  \"screenRatio\": 70\n}\n```"
        - id: d0516c64-4bac-4136-b42c-04adb02dff41
          role: user
          text: '现在请处理以下输入:


            **IP 形象说明:**

            {{#1773816706773.ip_character_description#}}


            **IP 形象图片 URL:**

            {{#1773905942059.url#}}'
        selected: false
        title: 解析IP形象LLM
        type: llm
        variables: []
        video:
          configs:
            variable_selector: []
          enabled: false
        vision:
          enabled: false
      height: 122
      id: '1773906244777'
      position:
        x: 1387
        y: 931
      positionAbsolute:
        x: 1387
        y: 931
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "function main({ llm_result }) {\n  let format_llm_result = llm_result;\n\
          \  if (format_llm_result.indexOf(\"```json\") >= 0) {\n    // 深度思考结果\n \
          \   // 取出json代码块\n    const startIndex = format_llm_result.indexOf(\"```json\"\
          );\n    const endIndex = format_llm_result.indexOf(\"```\", startIndex +\
          \ 7);\n    if (startIndex >= 0 && endIndex > startIndex) {\n      // 提取json字符串\n\
          \      format_llm_result = format_llm_result.substring(startIndex + 7, endIndex);\n\
          \      // 去掉代码块的换行(\\r\\n)\n      format_llm_result = format_llm_result.replace(/[\\\
          r\\n]/g, \"\");\n    }\n  }\n\n  const parseResult = JSON.parse(format_llm_result);\n\
          \  return {\n    reference_images: parseResult,\n  };\n}\n"
        code_language: javascript
        desc: ''
        outputs:
          ip_character:
            children: null
            type: object
        selected: false
        title: 解析IP形象结果处理
        type: code
        variables:
        - value_selector:
          - '1773906244777'
          - text
          value_type: string
          variable: llm_result
      height: 54
      id: '1773906529735'
      position:
        x: 1721
        y: 931
      positionAbsolute:
        x: 1721
        y: 931
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "\nfunction main() {\n    return {\n        ip_character: {}\n    }\n\
          }\n"
        code_language: javascript
        desc: ''
        outputs:
          ip_character:
            children: null
            type: object
        selected: false
        title: 无IP形象空数据
        type: code
        variables: []
      height: 54
      id: '1773906577314'
      position:
        x: 1721
        y: 1082
      positionAbsolute:
        x: 1721
        y: 1082
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        output_type: object
        selected: false
        title: IP形象聚合
        type: variable-aggregator
        variables:
        - - '1773906529735'
          - ip_character
        - - '1773906577314'
          - ip_character
      height: 136
      id: '1773906619924'
      position:
        x: 2055
        y: 890
      positionAbsolute:
        x: 2055
        y: 890
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    viewport:
      x: -301.7967417062482
      y: -120.65103776223145
      zoom: 1.0610015965572792