{
  "components": {
    "schemas": {
      "constant.ValueLabel": {
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.AddMusicReq": {
        "properties": {
          "duration": {
            "type": "integer"
          },
          "music_name": {
            "type": "string"
          },
          "music_url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.AddRippleBackgroundReq": {
        "properties": {
          "background": {
            "type": "string"
          }
        },
        "required": [
          "background"
        ],
        "type": "object"
      },
      "dto.AddRippleImageMaterialReq": {
        "properties": {
          "image_material": {
            "type": "string"
          }
        },
        "required": [
          "image_material"
        ],
        "type": "object"
      },
      "dto.AddRippleImagePodcastTemplateReq": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9",
            "enum": [
              0,
              1
            ],
            "type": "integer"
          },
          "scene": {
            "$ref": "#/components/schemas/dto.RippleImagePodcastTemplateSceneReq"
          }
        },
        "required": [
          "scene"
        ],
        "type": "object"
      },
      "dto.AddRippleWaveformReq": {
        "properties": {
          "waveformNode": {
            "$ref": "#/components/schemas/dto.RippleWaveformNode"
          }
        },
        "type": "object"
      },
      "dto.AddUserPodcastBackgroundReq": {
        "properties": {
          "aspect_ratio": {
            "description": "指针字段确保 aspect_ratio=0、typ=0 不会被 binding 的 required 误判为空值。",
            "enum": [
              0,
              1
            ],
            "type": "integer"
          },
          "avatar_type": {
            "description": "数字人类型：default/cartoon/pet",
            "enum": [
              "default",
              "cartoon",
              "pet"
            ],
            "type": "string"
          },
          "origin_url": {
            "description": "user_id、space_id、真实宽高及时间字段均由服务端生成，禁止通过请求体透传。",
            "maxLength": 512,
            "type": "string"
          },
          "preview_url": {
            "description": "可选预览图 URL，为空时使用原图",
            "maxLength": 512,
            "type": "string"
          },
          "typ": {
            "description": "背景类型：0=Speaker Focus，2=Alternating shots",
            "enum": [
              0,
              2
            ],
            "type": "integer"
          }
        },
        "required": [
          "aspect_ratio",
          "avatar_type",
          "origin_url",
          "typ"
        ],
        "type": "object"
      },
      "dto.AddWebhookRequest": {
        "properties": {
          "events": {
            "description": "事件列表",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "status": {
            "description": "状态",
            "enum": [
              "enabled",
              "disabled"
            ],
            "type": "string"
          },
          "url": {
            "description": "webhook地址",
            "type": "string"
          }
        },
        "required": [
          "events",
          "status",
          "url"
        ],
        "type": "object"
      },
      "dto.BranchRenderReq": {
        "properties": {
          "afterTTS": {
            "description": "内部使用参数  如果是tts之后的才能使用场景时长。否则为预估",
            "type": "boolean"
          },
          "createFrom": {
            "description": "内部使用参数",
            "type": "integer"
          },
          "is_draft_render": {
            "type": "boolean"
          },
          "tasks": {
            "description": "任务列表",
            "items": {
              "$ref": "#/components/schemas/dto.RanderReq"
            },
            "type": "array"
          }
        },
        "required": [
          "tasks"
        ],
        "type": "object"
      },
      "dto.CheckURLReq": {
        "properties": {
          "url": {
            "description": "要检查的url",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.CreatePacksReq": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比:0-9:16;1-16:9",
            "type": "integer"
          },
          "avatarType": {
            "description": "数字人类型 default/pet/cartoon/baby",
            "type": "string"
          },
          "avatar_library_id": {
            "description": "头像库ID",
            "type": "integer"
          },
          "backgroundPrompt": {
            "description": "背景提示词，内部逻辑使用",
            "type": "string"
          },
          "custom_prompt": {
            "description": "自定义prompt",
            "type": "string"
          },
          "gender": {
            "description": "性别:Male,Female",
            "type": "string"
          },
          "model": {
            "description": "使用的模型 0:默认/4:Seedream 4.0/9:Nano Banana Pro",
            "type": "integer"
          },
          "name": {
            "description": "名称",
            "type": "string"
          },
          "photo_url": {
            "description": "照片URL",
            "type": "string"
          },
          "podcast": {
            "description": "对话数字人的左边还是右边，内部逻辑使用",
            "type": "integer"
          },
          "podcastVersion": {
            "description": "podcast版本 目前有效值为 10 和 20",
            "type": "integer"
          },
          "second_person_photo_url": {
            "description": "第二个人的照片URL 仅在Nano Banana Pro生图时有效",
            "type": "string"
          },
          "seed": {
            "description": "随机种子，内部逻辑使用",
            "type": "integer"
          },
          "theme": {
            "description": "主题",
            "type": "string"
          },
          "themeList": {
            "description": "主题列表，内部逻辑使用，有传的情况下会优先取用",
            "items": {
              "$ref": "#/components/schemas/model.AigcPacksTheme"
            },
            "type": "array"
          },
          "theme_id": {
            "description": "主题ID",
            "type": "integer"
          },
          "theme_image_url": {
            "description": "主题图片URL 仅在Nano Banana Pro生图时有效",
            "type": "string"
          },
          "timbre_unique_id": {
            "description": "音色ID",
            "type": "string"
          }
        },
        "required": [
          "photo_url",
          "theme"
        ],
        "type": "object"
      },
      "dto.CreatePhotoReq": {
        "properties": {
          "age": {
            "description": "年纪",
            "type": "string"
          },
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9/2:1比1；podcast_cover 额外支持 3:3比4/4:4比3",
            "type": "integer"
          },
          "avatar_library_id": {
            "description": "avatar_library 表ID",
            "type": "integer"
          },
          "avatar_type": {
            "description": "数字人类型，可选，不传默认 default；支持 default/pet/cartoon",
            "enum": [
              "default",
              "pet",
              "cartoon"
            ],
            "type": "string"
          },
          "background": {
            "description": "提示词，长度上限1500英文字符",
            "type": "string"
          },
          "base_photo_url": {
            "description": "基础图片（向后兼容，建议使用 reference_images）",
            "type": "string"
          },
          "detail": {
            "description": "生图提示词，最多16000个Unicode字符",
            "maxLength": 16000,
            "type": "string"
          },
          "gender": {
            "description": "性别",
            "type": "string"
          },
          "lora_unique_id": {
            "description": "lora 模型 id",
            "type": "string"
          },
          "model": {
            "description": "模型: 1:modern-flair/2:timeless-charm",
            "type": "integer"
          },
          "number_of_images": {
            "description": "生成图片张数 1-4",
            "type": "integer"
          },
          "origin": {
            "description": "人种",
            "type": "string"
          },
          "photo_real": {
            "description": "真实感开关：true-开启；false-关闭",
            "type": "boolean"
          },
          "podcastTyp": {
            "description": "对话数字人类型 0:默认值，非对话数字人/1:左/2:右",
            "type": "integer"
          },
          "podcastVersion": {
            "description": "podcast版本 目前有效值为 10 和 20",
            "type": "integer"
          },
          "preset_style": {
            "description": "风格",
            "type": "string"
          },
          "quality": {
            "description": "生图质量 medium/high，仅 gpt-image2 使用",
            "type": "string"
          },
          "reference_images": {
            "description": "参考图列表",
            "items": {
              "$ref": "#/components/schemas/dto.ReferenceImageReq"
            },
            "type": "array"
          },
          "remix_avatar_unique_id": {
            "description": "remix ugcAvatar 表的 uniqueId",
            "type": "string"
          },
          "resolution": {
            "description": "生图分辨率 1K/2K/4K",
            "type": "string"
          },
          "seed": {
            "description": "随机种子",
            "type": "integer"
          },
          "source": {
            "description": "来源，目前支持 podcast/background/image/podcast_background/podcast_cover",
            "enum": [
              "podcast",
              "background",
              "image",
              "podcast_background",
              "podcast_cover"
            ],
            "type": "string"
          },
          "talking_pose": {
            "description": "提示词，长度上限1500英文字符",
            "type": "string"
          },
          "task_from": {
            "description": "任务来源：1-aigc;3-packs;99-代表工具生成，无需扣费和队列限制",
            "type": "integer"
          },
          "typ": {
            "description": "Podcast 背景分类；source=podcast_background 时必填，0:Speaker Focus/2:Alternating shots",
            "enum": [
              0,
              2
            ],
            "type": "integer"
          }
        },
        "required": [
          "number_of_images"
        ],
        "type": "object"
      },
      "dto.CreatePodcastAvatarReq": {
        "properties": {
          "avatar_type": {
            "description": "数字人类型 空:默认/pet:宠物/cartoon:卡通",
            "type": "string"
          },
          "background": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.PodcastBackgroundReq"
              }
            ],
            "description": "背景图"
          },
          "model": {
            "description": "使用的模型 3:Nano Banana 2/9:Nano Banana Pro/11:GPT Image 2",
            "enum": [
              3,
              9,
              11
            ],
            "type": "integer"
          },
          "packs": {
            "description": "两个pack的参数，第一个为左，第二个为右",
            "items": {
              "$ref": "#/components/schemas/dto.CreatePacksReq"
            },
            "type": "array"
          },
          "podcast_version": {
            "description": "默认 10 可选 20",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.CreatePodcastProjectReq": {
        "properties": {
          "attachments": {
            "description": "编辑态附件列表",
            "items": {
              "$ref": "#/components/schemas/dto.GPTAttachment"
            },
            "type": "array"
          },
          "input": {
            "description": "OpenAI Responses 风格 input[].content[]",
            "items": {
              "$ref": "#/components/schemas/dto.GPTInputMessage"
            },
            "type": "array"
          },
          "language": {
            "description": "语言",
            "type": "string"
          },
          "long_text": {
            "description": "长文本的内容",
            "type": "string"
          },
          "mixInfo": {
            "description": "混合来源详情，Origin=8时会有值",
            "type": "integer"
          },
          "need_send_mq": {
            "description": "是否发送mq消息",
            "type": "boolean"
          },
          "network_enabled": {
            "description": "是否允许联网搜索",
            "type": "boolean"
          },
          "origin": {
            "description": "参考资料来源 1:网页 URL/2:YouTube URL/3:文档文件 URL/4:长文本/5:原文本驱动/6:上传脚本/7:上传音频",
            "enum": [
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8
            ],
            "type": "integer"
          },
          "podcast_template_id": {
            "description": "跟创模板",
            "type": "integer"
          },
          "prj_id": {
            "description": "PutPodcastProject 接口使用，要编辑的项目ID",
            "type": "string"
          },
          "render_subtitle": {
            "description": "是否开启字幕 1:开启字幕/2:关闭字幕",
            "type": "integer"
          },
          "script_params": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.GPTScriptParams"
              }
            ],
            "description": "GPT 脚本生成参数"
          },
          "text": {
            "description": "编辑态文本，支持 {{ref:id}} 引用附件",
            "type": "string"
          },
          "tool_choice": {
            "description": "none/auto/required",
            "enum": [
              "none",
              "auto",
              "required"
            ],
            "type": "string"
          },
          "tools": {
            "description": "例如 [{\"type\":\"web_search\",\"external_web_access\":true}]",
            "items": {
              "$ref": "#/components/schemas/dto.GPTTool"
            },
            "type": "array"
          },
          "url": {
            "description": "链接, 上传文件后的地址或者站点地址，以逗号分割的字符串数组",
            "type": "string"
          },
          "urls": {
            "description": "链接数组；兼容 url 的逗号分隔格式",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "video_duration": {
            "description": "视频总时长",
            "enum": [
              "-3",
              "-5",
              "13-17",
              "18-22",
              "23-30",
              "4-6",
              "7-12",
              "22-28",
              "0.5",
              "0.5-1",
              "1-3",
              "3-5",
              "5-10"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.EditAsNewRippleImagePodcastTemplateReq": {
        "properties": {
          "id": {
            "type": "integer"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "dto.GPTAttachment": {
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.GPTContentBlock": {
        "properties": {
          "detail": {
            "enum": [
              "auto",
              "low",
              "high"
            ],
            "type": "string"
          },
          "file_id": {
            "type": "string"
          },
          "file_url": {
            "type": "string"
          },
          "image_url": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "type": {
            "enum": [
              "input_text",
              "input_image",
              "input_file"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "dto.GPTInputMessage": {
        "properties": {
          "content": {
            "items": {
              "$ref": "#/components/schemas/dto.GPTContentBlock"
            },
            "type": "array"
          },
          "role": {
            "enum": [
              "developer",
              "system",
              "user"
            ],
            "type": "string"
          }
        },
        "required": [
          "content",
          "role"
        ],
        "type": "object"
      },
      "dto.GPTScriptParams": {
        "properties": {
          "duration_seconds": {
            "type": "integer"
          },
          "language": {
            "type": "string"
          },
          "script_style": {
            "type": "string"
          },
          "speaker_count": {
            "type": "integer"
          },
          "target_audience": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.GPTTool": {
        "properties": {
          "external_web_access": {
            "type": "boolean"
          },
          "type": {
            "enum": [
              "web_search"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "dto.OssSignReq": {
        "properties": {
          "file_size": {
            "type": "integer"
          },
          "filename": {
            "type": "string"
          },
          "filetype": {
            "type": "string"
          },
          "source": {
            "description": "来源:1-packs_look",
            "type": "integer"
          },
          "use_to": {
            "description": "用处 media:商品的媒体文件/dp:数字人相关文件/audio:媒体声音",
            "type": "string"
          }
        },
        "required": [
          "filename"
        ],
        "type": "object"
      },
      "dto.PackDetail": {
        "properties": {
          "pack1_detail": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.PacksDetailItem"
              }
            ],
            "description": "左侧特写"
          },
          "pack2_detail": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.PacksDetailItem"
              }
            ],
            "description": "右侧特写"
          },
          "pack_detail": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.PacksDetailItem"
              }
            ],
            "description": "同屏图"
          }
        },
        "type": "object"
      },
      "dto.PacksDetailItem": {
        "properties": {
          "id": {
            "description": "记录的唯一标识符",
            "type": "integer"
          },
          "photo_tasks": {
            "description": "photo任务列表",
            "items": {
              "$ref": "#/components/schemas/dto.PacksPhotoTaskItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "dto.PacksPhotoTaskItem": {
        "properties": {
          "output_url": {
            "description": "图片地址",
            "type": "string"
          },
          "photo_unique_id": {
            "description": "photo任务的唯一标识符",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.PodcastAvatarGenerateReq": {
        "properties": {
          "avatar_type": {
            "description": "数字人类型 空:默认/pet:宠物/cartoon:卡通",
            "type": "string"
          },
          "model": {
            "description": "使用的模型；未传时使用 podcast_default_model，显式 0 仍表示 Runway",
            "type": "integer"
          },
          "pack_detail": {
            "description": "同屏图列表（2.0专用，支持多组），结构与查询返回一致",
            "items": {
              "$ref": "#/components/schemas/dto.PackDetail"
            },
            "type": "array"
          },
          "pack_item": {
            "items": {
              "properties": {
                "pack_id": {
                  "description": "对应哪个pack",
                  "type": "integer"
                },
                "photo_item": {
                  "items": {
                    "properties": {
                      "motion_unique_id": {
                        "description": "非必须 podcast 特写motion需要",
                        "type": "string"
                      },
                      "output_url": {
                        "description": "图片地址",
                        "type": "string"
                      },
                      "photo_unique_id": {
                        "description": "photo任务的唯一标识符",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "photo_to_avatar": {
            "description": "用户上传两张图直接生成",
            "items": {
              "$ref": "#/components/schemas/dto.PodcastPhoto2AvatarReqItem"
            },
            "type": "array"
          },
          "podcast_avatar_id": {
            "type": "integer"
          },
          "resolution": {
            "description": "分辨率，可选值 720/1080；未传时使用模型默认分辨率",
            "enum": [
              720,
              1080
            ],
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.PodcastAvatarMoreReq": {
        "properties": {
          "pack_id": {
            "description": "可选，指定只给当前对话数字人的某个pack生成更多图片；为空时左右pack都生成",
            "type": "integer"
          },
          "podcast_avatar_id": {
            "type": "integer"
          }
        },
        "required": [
          "podcast_avatar_id"
        ],
        "type": "object"
      },
      "dto.PodcastBackgroundReq": {
        "properties": {
          "id": {
            "description": "公共背景ID；用户背景固定传0",
            "type": "integer"
          },
          "label": {
            "description": "背景标签/名称",
            "type": "string"
          },
          "left_url": {
            "description": "左边背景图url",
            "type": "string"
          },
          "origin_url": {
            "description": "原图URL（实际使用此字段）",
            "type": "string"
          },
          "preview_url": {
            "description": "预览图URL",
            "type": "string"
          },
          "prompt": {
            "description": "背景提示词",
            "type": "string"
          },
          "right_url": {
            "description": "右边背景图url",
            "type": "string"
          },
          "style": {
            "description": "背景风格",
            "type": "string"
          },
          "user_background_id": {
            "description": "用户背景ID；大于0时由服务端按当前用户和空间回查",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.PodcastPhoto2AvatarReqItem": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9",
            "type": "integer"
          },
          "gender": {
            "description": "性别",
            "type": "string"
          },
          "name": {
            "description": "数字人名称",
            "type": "string"
          },
          "photo_url": {
            "description": "图片地址",
            "type": "string"
          },
          "timbre_unique_id": {
            "description": "音色id",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.PodcastRedoTTSReq": {
        "properties": {
          "is_new": {
            "description": "是新增分镜还是更新分镜 true=新增 false=更新",
            "type": "boolean"
          },
          "prj_id": {
            "description": "项目ID",
            "type": "string"
          },
          "scene_idx": {
            "description": "分镜索引",
            "type": "integer"
          },
          "scene_key": {
            "description": "分镜唯一标识，有值时优先于scene_idx；上传音频异步redo_tts按scene_idx定位，此字段作为前端key写回",
            "type": "string"
          },
          "script": {
            "description": "文案",
            "type": "string"
          },
          "script_config": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.ScriptConfig"
              }
            ],
            "description": "当前Host的TTS参数配置；不传时使用项目已保存配置"
          },
          "voice_id": {
            "description": "音色ID",
            "type": "string"
          }
        },
        "required": [
          "prj_id",
          "script"
        ],
        "type": "object"
      },
      "dto.PodcastTTSTaskReq": {
        "properties": {
          "task_id": {
            "description": "异步任务ID",
            "type": "string"
          }
        },
        "required": [
          "task_id"
        ],
        "type": "object"
      },
      "dto.PrjTimbreCloneReq": {
        "properties": {
          "labels": {
            "description": "内部音色标签，创建腾讯克隆音色时原样透传",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "language": {
            "description": "克隆语种 非必填 中文走海螺，其他走11labs",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "provider": {
            "enum": [
              "elevenlabs",
              "minimax",
              "hume_ai"
            ],
            "type": "string"
          },
          "remove_background_noise": {
            "type": "boolean"
          },
          "scenes": {
            "description": "内部使用场景，创建腾讯克隆音色时原样透传",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "dto.PrjTimbreSaveReq": {
        "properties": {
          "lang_id": {
            "type": "string"
          }
        },
        "required": [
          "lang_id"
        ],
        "type": "object"
      },
      "dto.PrjTimbreVoiceDesignReq": {
        "properties": {
          "preview_text": {
            "description": "试听音频文本，最多 500 个字符",
            "type": "string"
          },
          "prompt": {
            "description": "音色描述，用于指导 MiniMax 生成音色",
            "type": "string"
          },
          "task_id": {
            "description": "音色设计任务ID；再次抽卡时传入",
            "type": "integer"
          }
        },
        "required": [
          "preview_text",
          "prompt"
        ],
        "type": "object"
      },
      "dto.PrjTimbreVoiceDesignSaveReq": {
        "properties": {
          "desc": {
            "description": "音色描述",
            "type": "string"
          },
          "language": {
            "description": "音色语言标识，写入音色表用于后续筛选",
            "type": "string"
          },
          "name": {
            "description": "保存后的音色名称",
            "type": "string"
          },
          "tag": {
            "description": "音色标签",
            "type": "string"
          },
          "task_item_id": {
            "description": "音色设计任务item ID",
            "type": "integer"
          }
        },
        "required": [
          "desc",
          "language",
          "name",
          "tag",
          "task_item_id"
        ],
        "type": "object"
      },
      "dto.ProjectConcatTTSAudioReq": {
        "properties": {
          "prj_id": {
            "type": "string"
          }
        },
        "required": [
          "prj_id"
        ],
        "type": "object"
      },
      "dto.ProjectDeleteReq": {
        "properties": {
          "project_id": {
            "type": "string"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "dto.ProjectIDReq": {
        "properties": {
          "index": {
            "type": "integer"
          },
          "podcast_template_id": {
            "type": "integer"
          },
          "project_id": {
            "type": "string"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "dto.ProjectRetryReq": {
        "properties": {
          "project_id": {
            "type": "string"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "dto.PutTitleReq": {
        "properties": {
          "project_id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "project_id",
          "title"
        ],
        "type": "object"
      },
      "dto.QueryPodcastAvatarDPPerson": {
        "properties": {
          "id": {
            "description": "数字人ID",
            "type": "integer"
          },
          "person_source": {
            "description": "数字人来源",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "person_source"
        ],
        "type": "object"
      },
      "dto.QueryPodcastAvatarDPReq": {
        "properties": {
          "persons": {
            "description": "数字人信息列表（与PodcastAvatarID二选一，长度为1或2）",
            "items": {
              "$ref": "#/components/schemas/dto.QueryPodcastAvatarDPPerson"
            },
            "type": "array"
          },
          "podcast_avatar_id": {
            "description": "对话数字人ID（与Persons二选一）",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.RanderReq": {
        "properties": {
          "index": {
            "type": "integer"
          },
          "project_id": {
            "type": "string"
          },
          "workspace": {
            "type": "string"
          },
          "workspace_obj": {
            "$ref": "#/components/schemas/vo.FrontEndTemplate"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "dto.ReferenceImageReq": {
        "properties": {
          "key": {
            "description": "类型；source=image/background/podcast_background/podcast_cover 时不限制枚举",
            "type": "string"
          },
          "url": {
            "description": "图片URL",
            "type": "string"
          }
        },
        "required": [
          "key",
          "url"
        ],
        "type": "object"
      },
      "dto.RegenerateUserPodcastBackgroundReq": {
        "properties": {
          "user_background_id": {
            "description": "当前用户背景表主键，不是 AIGC 生图任务 ID",
            "type": "integer"
          }
        },
        "required": [
          "user_background_id"
        ],
        "type": "object"
      },
      "dto.RenamePodcastAvatarReq": {
        "properties": {
          "name": {
            "description": "对话数字人名称",
            "type": "string"
          },
          "podcast_avatar_id": {
            "description": "对话数字人id",
            "type": "integer"
          }
        },
        "required": [
          "name",
          "podcast_avatar_id"
        ],
        "type": "object"
      },
      "dto.RenderCreditCheckReq": {
        "properties": {
          "project_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.RippleImagePodcastTemplateSceneReq": {
        "properties": {
          "tracks": {
            "items": {
              "$ref": "#/components/schemas/vo.Track"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "dto.RippleWaveformNode": {
        "properties": {
          "h": {
            "type": "integer"
          },
          "prop": {
            "$ref": "#/components/schemas/dto.RippleWaveformProp"
          },
          "w": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.RippleWaveformProp": {
        "properties": {
          "audioPath": {
            "type": "string"
          },
          "waveformConfig": {
            "additionalProperties": {},
            "type": "object"
          }
        },
        "type": "object"
      },
      "dto.SavePodcastAvatarInfoReq": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比/0:9比16/1:16比9/2:1比1",
            "type": "integer"
          },
          "audio_enhancement_enabled": {
            "description": "是否启用增强音频；未传时保留项目原值",
            "type": "boolean"
          },
          "copy_from": {
            "type": "integer"
          },
          "first_speaker": {
            "description": "首先说话人 1-左边（上面） 2-右边（下面）",
            "type": "integer"
          },
          "gpt_sell_text": {
            "description": "文案内容",
            "items": {
              "$ref": "#/components/schemas/vo.GetScriptListRespItem"
            },
            "type": "array"
          },
          "image_podcast_template_id": {
            "description": "图片播客模板id，传入时才按图片播客处理",
            "type": "integer"
          },
          "persons": {
            "description": "选中的数字人，长度为1或2；长度为1时 speaker_count 必须为1，优先级高于 podcast_avatar_id",
            "items": {
              "$ref": "#/components/schemas/dto.SavePodcastAvatarInfoReqPerson"
            },
            "type": "array"
          },
          "podcast_avatar_id": {
            "description": "对话数字人id",
            "type": "integer"
          },
          "podcast_template_id": {
            "type": "integer"
          },
          "project_id": {
            "type": "string"
          },
          "render_subtitle": {
            "description": "是否开启字幕 1:开启字幕/2:关闭字幕",
            "type": "integer"
          },
          "scene": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.RippleImagePodcastTemplateSceneReq"
              }
            ],
            "description": "场景配置；普通播客也可能传入字幕等场景配置"
          },
          "scenes": {
            "description": "分镜内的 B-roll 素材；非空时与 gpt_sell_text 的分镜按下标一一对应",
            "items": {
              "$ref": "#/components/schemas/vo.Scene"
            },
            "type": "array"
          },
          "speaker_count": {
            "description": "说话人数，1 表示单人文案，2 表示双人文案；不传时沿用项目原配置",
            "type": "integer"
          },
          "timbre_configs": {
            "description": "Host音色参数配置，顺序与timbre_unique_id一致；null表示沿用后端默认",
            "items": {
              "$ref": "#/components/schemas/vo.ScriptConfig"
            },
            "type": "array"
          },
          "timbre_unique_id": {
            "description": "音色唯一id 长度为2的数组 第一个代表左边的音色，第二个代表右边的音色",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "url": {
            "description": "音频直驱修改后的地址",
            "type": "string"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "dto.SavePodcastAvatarInfoReqPerson": {
        "properties": {
          "avatar_library_id": {
            "description": "数字人所属库id，方便以此新建的时候前端回填数字人",
            "type": "integer"
          },
          "avatar_type": {
            "description": "前端区分数字人类型的字段，后端只是存储，不做任何处理",
            "type": "string"
          },
          "avatar_url": {
            "description": "数字人封面图地址，前端使用",
            "type": "string"
          },
          "cover_url": {
            "description": "数字人原尺寸封面图地址，前端使用",
            "type": "string"
          },
          "h": {
            "description": "数字人在容器内的尺寸 高",
            "type": "number"
          },
          "id": {
            "description": "数字人id",
            "type": "integer"
          },
          "person_source": {
            "description": "数字人来源，此处不能传对话数字人",
            "type": "integer"
          },
          "w": {
            "description": "数字人在容器内的尺寸 宽",
            "type": "number"
          },
          "x": {
            "description": "数字人在容器内的位置 X轴",
            "type": "number"
          },
          "y": {
            "description": "数字人在容器内的位置 Y轴",
            "type": "number"
          }
        },
        "type": "object"
      },
      "dto.SetCoverReq": {
        "properties": {
          "cover_url": {
            "description": "封面地址",
            "type": "string"
          },
          "project_id": {
            "description": "项目ID",
            "type": "string"
          }
        },
        "required": [
          "cover_url",
          "project_id"
        ],
        "type": "object"
      },
      "dto.UpdateRippleImagePodcastTemplateReq": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "scene": {
            "$ref": "#/components/schemas/dto.RippleImagePodcastTemplateSceneReq"
          }
        },
        "required": [
          "id",
          "scene"
        ],
        "type": "object"
      },
      "dto.UpdateRippleWaveformReq": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "waveformNode": {
            "$ref": "#/components/schemas/dto.RippleWaveformNode"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "dto.UpdateWebhookRequest": {
        "properties": {
          "endpoint_id": {
            "description": "webhook ID",
            "type": "string"
          },
          "events": {
            "description": "事件列表",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "status": {
            "description": "状态",
            "enum": [
              "enabled",
              "disabled"
            ],
            "type": "string"
          },
          "url": {
            "description": "webhook地址",
            "type": "string"
          }
        },
        "required": [
          "events",
          "status",
          "url"
        ],
        "type": "object"
      },
      "echo.JSON": {
        "properties": {
          "cause": {
            "type": "string"
          },
          "code": {
            "type": "integer"
          },
          "data": {},
          "details": {},
          "msg": {
            "type": "string"
          },
          "rid": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "model.AIGCPodcastAvatarDp": {
        "properties": {
          "aigc_podcast_avatar_id": {
            "type": "integer"
          },
          "aspect_ratio": {
            "description": "宽高比/0:9比16/1:16比9",
            "type": "integer"
          },
          "avatar_type": {
            "description": "数字人类型 default/pet/cartoon/baby",
            "type": "string"
          },
          "background_id": {
            "description": "关联的 Podcast 背景ID",
            "type": "integer"
          },
          "create_time": {
            "description": "创建时间",
            "type": "integer"
          },
          "delete_time": {
            "description": "删除时间",
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "motion_preview_url": {
            "description": "motion预览视频（无驱动嘴形）",
            "type": "string"
          },
          "preview_url": {
            "description": "预览视频（有驱动嘴形）",
            "type": "string"
          },
          "prj_user_digital_person1_id": {
            "description": "关联的数字人1id",
            "type": "integer"
          },
          "prj_user_digital_person2_id": {
            "description": "关联的数字人2id",
            "type": "integer"
          },
          "space_id": {
            "description": "空间的唯一标识符",
            "type": "integer"
          },
          "status": {
            "description": "状态 2:photo生成完成/3:motion生成中/4:avatar制作中/5:已完成/6:失败",
            "type": "integer"
          },
          "typ": {
            "description": "类型 0:切镜对话数字人/1:裁剪对话数字人",
            "type": "integer"
          },
          "update_time": {
            "description": "更新时间",
            "type": "integer"
          },
          "user_id": {
            "description": "用户的唯一标识符",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "model.AigcPacksTheme": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9",
            "type": "integer"
          },
          "category": {
            "description": "类型",
            "type": "string"
          },
          "create_time": {
            "description": "创建时间",
            "type": "integer"
          },
          "delete_time": {
            "description": "删除时间",
            "type": "integer"
          },
          "id": {
            "description": "记录的唯一标识符",
            "type": "integer"
          },
          "prompt": {
            "description": "提示词",
            "type": "string"
          },
          "sample_cover": {
            "description": "示例封面",
            "type": "string"
          },
          "sample_video": {
            "description": "示例视频",
            "type": "string"
          },
          "subscheme": {
            "description": "子样式",
            "type": "string"
          },
          "tag": {
            "description": "标签",
            "type": "string"
          },
          "typ": {
            "description": "主题类型 1:默认主题/2:对话数字人主题",
            "type": "integer"
          },
          "update_time": {
            "description": "更新时间",
            "type": "integer"
          },
          "use_count": {
            "description": "使用数",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "model.CmzGoodsPrivileges": {
        "properties": {
          "api_credit": {
            "description": "api credit 数量",
            "type": "number"
          },
          "credit": {
            "description": "credit 数量",
            "type": "number"
          },
          "lip_sync_duration": {
            "description": "lip sync 秒数",
            "type": "number"
          },
          "team_seat": {
            "description": "team 席位",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "model.Letter": {
        "properties": {
          "duration": {
            "description": "单词的持续时间，单位为毫秒",
            "type": "integer"
          },
          "endTime": {
            "description": "单词的结束时间，单位为毫秒",
            "type": "integer"
          },
          "startTime": {
            "description": "单词的开始时间，单位为毫秒",
            "type": "integer"
          },
          "text": {
            "description": "单词，实际会包含单词后面的空格或符号",
            "type": "string"
          },
          "wordLen": {
            "description": "单词本身的宽度，不包含空格和符号",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "model.PrjDigitalPersonForm": {
        "properties": {
          "cover_url": {
            "description": "形态封面【这个需要吗？",
            "type": "string"
          },
          "dp_id": {
            "description": "该形态归属于哪个数字人",
            "type": "integer"
          },
          "form": {
            "description": "形态类型 1:闭嘴不说话/2:全屏特写",
            "type": "integer"
          },
          "h": {
            "description": "高",
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "motion_unique_id": {
            "description": "关联的motion唯一ID",
            "type": "string"
          },
          "name": {
            "description": "形态名称，展示用",
            "type": "string"
          },
          "source": {
            "description": "数字人来源",
            "type": "integer"
          },
          "url": {
            "description": "形态视频",
            "type": "string"
          },
          "w": {
            "description": "宽",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "model.PrjTimbre": {
        "properties": {
          "accent": {
            "description": "elevenlabs标签 口音",
            "type": "string"
          },
          "age": {
            "description": "elevenlabs标签 年龄",
            "type": "string"
          },
          "args": {
            "description": "声音人参数",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "audition_path": {
            "type": "string"
          },
          "category": {
            "description": "音色类别",
            "type": "string"
          },
          "cloned_args": {
            "$ref": "#/components/schemas/model.PrjTimbreClonedArgs"
          },
          "cloned_file": {
            "description": "克隆文件",
            "type": "string"
          },
          "create_from": {
            "description": "1后台录入 2声音克隆 3视频翻译",
            "type": "integer"
          },
          "create_time": {
            "type": "integer"
          },
          "default_speed": {
            "description": "默认语速",
            "type": "number"
          },
          "desc": {
            "description": "声音人说明",
            "type": "string"
          },
          "descriptive": {
            "description": "elevenlabs标签 描述",
            "type": "string"
          },
          "external_lang_id": {
            "description": "外部音色ID",
            "type": "string"
          },
          "external_status": {
            "description": "外部状态 是否在槽位，1 正常 2 不可用",
            "type": "integer"
          },
          "gender": {
            "description": "性别 Male or Female /elevenlabs有标签的话会用 性别",
            "type": "string"
          },
          "grade": {
            "description": "0 启用； 1 禁用",
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "is_recommend": {
            "description": "是否推荐音色：0否 1是",
            "type": "integer"
          },
          "keywords": {
            "description": "声音人关键词",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "lang": {
            "description": "cn 中文； en 英文",
            "type": "string"
          },
          "langID": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "order": {
            "type": "integer"
          },
          "ori_cloned_file": {
            "description": "原始音频",
            "type": "string"
          },
          "payment_id": {
            "description": "支付ID",
            "type": "string"
          },
          "provider": {
            "description": "供应商，给前端展示用的，实际供应商参考 type 字段 elevenlabs minimax hume_ai listen_hub",
            "type": "string"
          },
          "recent_voice_id": {
            "description": "最近一次克隆的voice_id",
            "type": "string"
          },
          "space_id": {
            "description": "spaceID",
            "type": "integer"
          },
          "status": {
            "description": "0 启用； 1 禁用",
            "type": "integer"
          },
          "tags": {
            "description": "标签",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "text": {
            "type": "string"
          },
          "third_api_key_id": {
            "description": "第三方音色 APIkey 记录的ID，对应third_party_voice ID",
            "type": "integer"
          },
          "type": {
            "description": "声音人类型： microsoft",
            "type": "string"
          },
          "unique_id": {
            "type": "string"
          },
          "update_time": {
            "type": "integer"
          },
          "use_case": {
            "description": "elevenlabs标签 用途",
            "type": "string"
          },
          "user_id": {
            "description": "用户ID 默认为0 非0代表用户音色",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "model.PrjTimbreArgs": {
        "properties": {
          "display_name": {
            "type": "string"
          },
          "gender": {
            "type": "string"
          },
          "lang_id": {
            "type": "string"
          },
          "locale": {
            "type": "string"
          },
          "locale_list": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "locale_name": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "style_list": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "voice_type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "model.PrjTimbreClonedArgs": {
        "properties": {
          "labels": {
            "description": "内部音色标签，腾讯 VoiceProfile.Labels 直接透传",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "remove_background_noise": {
            "description": "移除背景噪音",
            "type": "boolean"
          },
          "scenes": {
            "description": "内部使用场景，腾讯 VoiceProfile.Scenes 直接透传",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "model.UserCreatedComment": {
        "properties": {
          "create_time": {
            "type": "integer"
          },
          "data_id": {
            "type": "string"
          },
          "data_type": {
            "type": "string"
          },
          "feedback": {
            "type": "string"
          },
          "feedback_tag": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "id": {
            "type": "integer"
          },
          "rating": {
            "type": "string"
          },
          "uid": {
            "type": "integer"
          },
          "update_time": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.AddRippleBackgroundResp": {
        "properties": {
          "id": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.AddRippleImageMaterialResp": {
        "properties": {
          "id": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.AddRippleImagePodcastTemplateResp": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9",
            "type": "integer"
          },
          "id": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.AddRippleWaveformResp": {
        "properties": {
          "config_oss_key": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "waveform_info": {
            "$ref": "#/components/schemas/vo.RippleWaveformInfo"
          }
        },
        "type": "object"
      },
      "vo.ApiTemplateMeta": {
        "properties": {
          "replace_key": {
            "description": "元素标识符，方便调用API的时候定位到此元素",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.AudioScript": {
        "properties": {
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "description": "0 正常 1 歌曲",
            "type": "integer"
          },
          "url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.CheckURLResp": {
        "properties": {
          "enable": {
            "description": "是否可用",
            "type": "boolean"
          },
          "type": {
            "description": "website / youtube",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.CmzPromoteCouponsInfo": {
        "properties": {
          "amount_off": {
            "description": "直减金额(到分)",
            "type": "integer"
          },
          "amount_off_dollar": {
            "description": "直减金额(到美元)",
            "type": "number"
          },
          "currency": {
            "description": "币种",
            "type": "string"
          },
          "percent_off": {
            "description": "减少的百分比",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.CreatePodcastAvatarResp": {
        "properties": {
          "pack_ids": {
            "description": "两个pack的id，第一个为左，第二个为右",
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "podcast_avatar_id": {
            "description": "对话数字人id",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.CreateTempUrlResp": {
        "properties": {
          "full_path": {
            "description": "完整路径，包含域名",
            "type": "string"
          },
          "key": {
            "description": "文件名, 带路径",
            "type": "string"
          },
          "sign_url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.Cross": {
        "properties": {
          "in": {
            "description": "转场进入方式 null | \"fate\" | \"left\" | \"right\" | \"up\" | \"down\"",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "in_time": {
            "description": "转场进入的持续时间",
            "type": "number"
          },
          "out": {
            "description": "转场离开方式 null | \"fate\" | \"left\" | \"right\" | \"up\" | \"down\"",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "out_time": {
            "description": "转场离开的持续时间",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.DPInfoItem": {
        "properties": {
          "age": {
            "description": "年纪",
            "type": "string"
          },
          "aspect_ratio": {
            "description": "宽高比/0:9比16/1:16比9/2:1比1",
            "type": "integer"
          },
          "avatar_library_id": {
            "type": "string"
          },
          "avatar_type": {
            "description": "数字人类型 default/pet/cartoon/baby",
            "type": "string"
          },
          "avatar_url": {
            "type": "string"
          },
          "avatar_x_belong": {
            "description": "avatarX归属于哪个数字人",
            "type": "integer"
          },
          "avatar_x_name": {
            "description": "avatarX名称",
            "type": "string"
          },
          "avatar_x_num": {
            "description": "avatarX数量",
            "type": "integer"
          },
          "bgTransparent": {
            "description": "当前数字人是背景透明",
            "type": "boolean"
          },
          "circle_cover_url": {
            "type": "string"
          },
          "cover_url": {
            "type": "string"
          },
          "digitalPersonCanUse": {
            "description": "当前数字人是否可用",
            "type": "boolean"
          },
          "display_position": {
            "type": "integer"
          },
          "dontUseStaticFrame": {
            "description": "是否禁用嘴形静态帧推理，驱动视频特效时需要禁用",
            "type": "boolean"
          },
          "ethnicity": {
            "description": "种族",
            "type": "string"
          },
          "face_center_x": {
            "type": "number"
          },
          "face_center_y": {
            "type": "number"
          },
          "face_doubled": {
            "description": "原视频已正反播",
            "type": "boolean"
          },
          "face_json": {
            "type": "string"
          },
          "face_url": {
            "type": "string"
          },
          "forms": {
            "additionalProperties": {
              "$ref": "#/components/schemas/model.PrjDigitalPersonForm"
            },
            "description": "该数字人的不同形态",
            "type": "object"
          },
          "gender": {
            "type": "integer"
          },
          "h": {
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "keying_enable": {
            "type": "integer"
          },
          "keying_face_doubled": {
            "description": "抠像视频已正反播",
            "type": "boolean"
          },
          "keying_video_url": {
            "type": "string"
          },
          "length": {
            "type": "number"
          },
          "mask_url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "occupation": {
            "description": "职业",
            "type": "string"
          },
          "originPersonSource": {
            "description": "数据库的personSource",
            "type": "integer"
          },
          "personSource": {
            "description": "因有PreferModel 才修改的source",
            "type": "integer"
          },
          "pose": {
            "description": "姿势",
            "type": "string"
          },
          "prefer_model": {
            "type": "string"
          },
          "preview_mask_url": {
            "type": "string"
          },
          "preview_url": {
            "type": "string"
          },
          "selectVoiceId": {
            "description": "当前使用的voice ID： timbre的unique ID",
            "type": "string"
          },
          "skins": {
            "description": "肤色",
            "type": "string"
          },
          "sort": {
            "type": "integer"
          },
          "spaceId": {
            "description": "所属空间 默认-1",
            "type": "integer"
          },
          "style": {
            "description": "风格",
            "type": "string"
          },
          "theme": {
            "description": "主题",
            "type": "string"
          },
          "third_party_lip": {
            "description": "是否使用第三方嘴形0:不使用/1:爱诗",
            "type": "integer"
          },
          "timbre_id": {
            "type": "integer"
          },
          "type": {
            "type": "integer"
          },
          "voice_id": {
            "description": "VoiceID 废弃，用timbre_id替代",
            "type": "string"
          },
          "w": {
            "type": "integer"
          },
          "webm_url": {
            "type": "string"
          },
          "welcome_url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.DigitalPersonDetailWithoutAvatarX": {
        "properties": {
          "avatar_xid": {
            "type": "integer"
          },
          "dp_info": {
            "$ref": "#/components/schemas/vo.DPInfoItem"
          },
          "timbre_lang_id": {
            "type": "string"
          },
          "timbre_name": {
            "type": "string"
          },
          "timbre_type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.DownloadAudioResp": {
        "properties": {
          "id": {
            "description": "项目ID",
            "type": "string"
          },
          "url": {
            "description": "音频地址",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.EnterpriseMemberItem": {
        "properties": {
          "credits_quota": {
            "description": "配额相关",
            "type": "number"
          },
          "credits_used": {
            "type": "number"
          },
          "email": {
            "type": "string"
          },
          "has_validity": {
            "description": "有效期相关",
            "type": "boolean"
          },
          "id": {
            "description": "实际是enterprise_user_allocation.id",
            "type": "integer"
          },
          "lip_sync_quota": {
            "type": "number"
          },
          "lip_sync_used": {
            "type": "number"
          },
          "space_id": {
            "type": "integer"
          },
          "space_name": {
            "type": "string"
          },
          "user_id": {
            "type": "integer"
          },
          "user_status": {
            "type": "integer"
          },
          "username": {
            "type": "string"
          },
          "validity_end_time": {
            "type": "integer"
          },
          "validity_months": {
            "type": "integer"
          },
          "validity_start_time": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.Flags": {
        "properties": {
          "emotions": {
            "description": "是否支持人物表情选择，默认false",
            "type": "boolean"
          },
          "podcast": {
            "description": "是否是podcast项目，默认false",
            "type": "boolean"
          },
          "ppt2video": {
            "description": "是否是ppt转视频的项目，默认false",
            "type": "boolean"
          },
          "uhd": {
            "description": "是否是4k项目",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "vo.FrontEndTemplate": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比",
            "type": "integer"
          },
          "condition": {
            "description": "工程状态，目前只有 edited 这一个枚举值，代表用户通过高级编辑器制作了当前工程文件",
            "type": "string"
          },
          "ext": {
            "description": "空值默認帶背景MP4 綠幕webm 如果需要綠幕mp4就填mp4",
            "type": "string"
          },
          "flags": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.Flags"
              }
            ],
            "description": "特殊标记"
          },
          "h": {
            "description": "视频高度",
            "type": "integer"
          },
          "has_edit_media": {
            "description": "是否有编辑媒体",
            "type": "boolean"
          },
          "keying_enable": {
            "description": "当前数字人是否可以选抠像模式",
            "type": "integer"
          },
          "music_id": {
            "description": "背景音乐ID",
            "type": "integer"
          },
          "name": {
            "description": "模板名称",
            "type": "string"
          },
          "person_id": {
            "description": "数字人ID",
            "type": "integer"
          },
          "person_source": {
            "description": "数字人来源0:官方提供的数字/1:用户定制数字人",
            "type": "integer"
          },
          "preview_cover_time": {
            "description": "预览封面时间",
            "type": "number"
          },
          "preview_cover_url": {
            "description": "预览界面模版封面图片的url，默认为空，如果有就优先使用这个",
            "type": "string"
          },
          "render_subtitle": {
            "description": "是否渲染字幕",
            "type": "boolean"
          },
          "scenes": {
            "description": "场景信息，目前暂时不使用，默认只有第一个场景",
            "items": {
              "$ref": "#/components/schemas/vo.Scene"
            },
            "type": "array"
          },
          "subtitle_version": {
            "description": "字幕版本号，默认为0代表旧字幕，新的字幕用的是1",
            "type": "integer"
          },
          "t_id": {
            "description": "模版ID",
            "type": "integer"
          },
          "total_duration": {
            "description": "分镜的总时长【合成步骤使用】HandlePrjPreprocess赋值",
            "type": "number"
          },
          "tracks": {
            "description": "全局时间轴列表，目前仅用于背景音乐",
            "items": {
              "$ref": "#/components/schemas/vo.Track"
            },
            "type": "array"
          },
          "tts_args": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TTSArgs"
              }
            ],
            "description": "TTS配置"
          },
          "tts_voice_id": {
            "description": "TTS语音ID【后端内部使用】",
            "type": "string"
          },
          "used_bg_transparent": {
            "description": "是否使用抠像数字人【前端使用】",
            "type": "boolean"
          },
          "version": {
            "description": "工程文件版本号",
            "type": "string"
          },
          "w": {
            "description": "视频宽度",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.GetDraftPodcastAvatarResp": {
        "properties": {
          "podcast_avatars": {
            "description": "草稿对话数字人列表",
            "items": {
              "$ref": "#/components/schemas/vo.PodcastAvatarDraftItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.GetPodcastAvatarResp": {
        "properties": {
          "avatar_type": {
            "description": "数字人类型 空:默认/pet:宠物/cartoon:卡通",
            "type": "string"
          },
          "err_msg": {
            "description": "错误信息",
            "type": "string"
          },
          "is_failed": {
            "description": "已完成的photo任务中是否存在失败",
            "type": "boolean"
          },
          "is_same_screen": {
            "description": "是否是同屏模式（2.0）",
            "type": "boolean"
          },
          "pack1_detail": {
            "$ref": "#/components/schemas/vo.PacksDetailResp"
          },
          "pack2_detail": {
            "$ref": "#/components/schemas/vo.PacksDetailResp"
          },
          "pack_detail": {
            "description": "同屏图列表（2.0专用，支持多组）",
            "items": {
              "$ref": "#/components/schemas/vo.PackDetail"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.GetScriptListRespItem": {
        "properties": {
          "from_cache": {
            "description": "是否是缓存数据",
            "type": "boolean"
          },
          "index": {
            "description": "文案索引，当作id用，后续做视频时传这个标记用户选了哪个文案",
            "type": "integer"
          },
          "key_list": {
            "description": "每个分镜的key，前端用于唯一标记此分镜",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "prompt_id": {
            "description": "使用的数据库中的id",
            "type": "integer"
          },
          "scene_text": {
            "description": "场景内容",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "speakers": {
            "description": "说话人 A/B/placeholder；placeholder 表示静音分镜，跟场景内容一一对应",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "text": {
            "description": "文案内容",
            "type": "string"
          },
          "title": {
            "description": "文案标题",
            "type": "string"
          },
          "url": {
            "description": "图片链接",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.KeyFrame": {
        "properties": {
          "func": {
            "description": "关键帧函数",
            "type": "string"
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.KeyFrameProperties"
              }
            ],
            "description": "关键帧时该元素属性"
          },
          "timestamp": {
            "description": "关键帧时间，单位为秒",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.KeyFrameProperties": {
        "properties": {
          "alpha": {
            "description": "透明度",
            "type": "number"
          },
          "h": {
            "description": "元素高度",
            "type": "integer"
          },
          "r": {
            "description": "旋转角度",
            "type": "integer"
          },
          "scale": {
            "description": "缩放比例",
            "type": "number"
          },
          "w": {
            "description": "元素宽度",
            "type": "integer"
          },
          "x": {
            "description": "元素位置坐标 x",
            "type": "integer"
          },
          "y": {
            "description": "元素位置坐标 y",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.LabelEnumElevenlabsResp": {
        "properties": {
          "accent": {
            "description": "elevenlabs标签 口音",
            "items": {
              "$ref": "#/components/schemas/constant.ValueLabel"
            },
            "type": "array"
          },
          "age": {
            "description": "elevenlabs标签 年龄",
            "items": {
              "$ref": "#/components/schemas/constant.ValueLabel"
            },
            "type": "array"
          },
          "gender": {
            "description": "elevenlabs标签 性别",
            "items": {
              "$ref": "#/components/schemas/constant.ValueLabel"
            },
            "type": "array"
          },
          "language": {
            "description": "elevenlabs标签 语言",
            "items": {
              "$ref": "#/components/schemas/constant.ValueLabel"
            },
            "type": "array"
          },
          "use_case": {
            "description": "elevenlabs标签 用途",
            "items": {
              "$ref": "#/components/schemas/constant.ValueLabel"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.LabelEnumResp": {
        "properties": {
          "accent": {
            "description": "elevenlabs标签 口音",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "descriptive": {
            "description": "elevenlabs标签 描述",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "gender": {
            "description": "elevenlabs标签 性别",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "language": {
            "description": "elevenlabs标签 语言",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "use_case": {
            "description": "elevenlabs标签 用途",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.LayerShape": {
        "properties": {
          "background_gauss": {
            "description": "背景高斯模糊取值范围为[0-10]",
            "type": "integer"
          },
          "color": {
            "description": "形状背景颜色",
            "type": "string"
          },
          "content_position": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.LayerShapeContentPosition"
              }
            ],
            "description": "容器内元素位置信息"
          },
          "disable_shape": {
            "description": "给合成服务传参时是否【不】套容器；模板给出的素材该字段均为false；用户添加的素材默认true，有需要裁剪或者圆角之类的才改成false",
            "type": "boolean"
          },
          "object_fit": {
            "description": "内容填充方式默认 cover /contain/fill/none/scale-down",
            "type": "string"
          },
          "radius": {
            "description": "圆角",
            "type": "integer"
          },
          "type": {
            "description": "形状 矩形 rect、圆形 circle",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.LayerShapeContentPosition": {
        "properties": {
          "h": {
            "description": "容器内元素高度 【相对容器尺寸，单位为百分比】",
            "type": "number"
          },
          "r": {
            "description": "容器内元素旋转角度",
            "type": "integer"
          },
          "w": {
            "description": "容器内元素宽度 【相对容器尺寸，单位为百分比】",
            "type": "number"
          },
          "x": {
            "description": "容器内元素位置x 【相对容器位置，单位为百分比】",
            "type": "number"
          },
          "y": {
            "description": "容器内元素位置y 【相对容器位置，单位为百分比】",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.LayerSubtitle": {
        "properties": {
          "font_family": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.SubtitleFontFamily"
              }
            ],
            "description": "字幕字体"
          },
          "html": {
            "description": "字幕HTML代码",
            "type": "string"
          },
          "line_size": {
            "description": "字幕共多少行",
            "type": "integer"
          },
          "mss": {
            "description": "每行多少个字",
            "type": "integer"
          },
          "prop": {
            "additionalProperties": {
              "additionalProperties": {},
              "type": "object"
            },
            "description": "字幕样式信息",
            "type": "object"
          },
          "text": {
            "description": "字幕文本",
            "type": "string"
          },
          "tts_info_index": {
            "description": "标记对应的是哪个 ttsres ，默认情况下等同于场景索引，除非用户删除/添加了场景",
            "type": "integer"
          },
          "word_seq": {
            "description": "字幕轴信息",
            "items": {
              "$ref": "#/components/schemas/vo.SubtitleWordSeq"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.LayerTimeline": {
        "properties": {
          "cross": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.Cross"
              }
            ],
            "description": "转场信息"
          },
          "end": {
            "description": "结束时间",
            "type": "number"
          },
          "key_frames": {
            "description": "关键帧",
            "items": {
              "$ref": "#/components/schemas/vo.KeyFrame"
            },
            "type": "array"
          },
          "start": {
            "description": "开始时间",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.ListEventsResponse": {
        "properties": {
          "events": {
            "description": "事件列表",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.ListPodcastAvatarByUserIdResp": {
        "properties": {
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.ListPodcastAvatarItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.ListPodcastAvatarItem": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比/0:9比16/1:16比9",
            "type": "integer"
          },
          "avatar_type": {
            "description": "数字人类型 default/pet/cartoon/baby",
            "type": "string"
          },
          "background_id": {
            "description": "背景ID",
            "type": "integer"
          },
          "background_url": {
            "description": "背景展示图URL",
            "type": "string"
          },
          "id": {
            "description": "ID, 对话数字人ID",
            "type": "integer"
          },
          "is_demo": {
            "description": "是否是Demo，false不是，true是",
            "type": "boolean"
          },
          "motion_preview_url": {
            "description": "motion预览视频URL（不驱动嘴形）",
            "type": "string"
          },
          "podcast_avatar_id": {
            "description": "创建/生成对话数字人的ID，仅用户数字人返回",
            "type": "integer"
          },
          "prjUserDigitalPerson1": {
            "$ref": "#/components/schemas/vo.UserDigitalPersonListItem"
          },
          "prjUserDigitalPerson2": {
            "$ref": "#/components/schemas/vo.UserDigitalPersonListItem"
          },
          "sort": {
            "description": "demo排序值，数字越大越靠前",
            "type": "integer"
          },
          "status": {
            "description": "状态 0:未开始/1:photo生成中/2:photo生成完成/3:motion生成中/4:avatar制作中/5:已完成/6:失败",
            "type": "integer"
          },
          "tag": {
            "description": "标签",
            "type": "string"
          },
          "typ": {
            "description": "类型 0:切镜对话数字人/1:裁剪对话数字人/2:多机位数字人",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.ListPodcastResp": {
        "properties": {
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.PrjInfoPageResp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.ListTimbreElevenlabsResp": {
        "properties": {
          "has_more": {
            "type": "boolean"
          },
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.ListTimbreElevenlabsRespList"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.ListTimbreElevenlabsRespList": {
        "properties": {
          "accent": {
            "type": "string"
          },
          "age": {
            "type": "string"
          },
          "args": {
            "$ref": "#/components/schemas/model.PrjTimbreArgs"
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "descriptive": {
            "type": "string"
          },
          "favorite_id": {
            "description": "收藏ID",
            "type": "integer"
          },
          "gender": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "language_code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "preview_url": {
            "type": "string"
          },
          "public_owner_id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "unique_id": {
            "type": "string"
          },
          "use_case": {
            "type": "string"
          },
          "voice_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.ListTimbreResp": {
        "properties": {
          "timbres": {
            "items": {
              "$ref": "#/components/schemas/vo.PrjTimbreListResp"
            },
            "type": "array"
          },
          "total": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.ListWebhookData": {
        "properties": {
          "endpoints": {
            "description": "webhook端点列表",
            "items": {
              "$ref": "#/components/schemas/vo.WebhookEndpoint"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.ListWebhookResponse": {
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.ListWebhookData"
              }
            ],
            "description": "响应数据"
          }
        },
        "type": "object"
      },
      "vo.MovingCamera": {
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PackDetail": {
        "properties": {
          "pack1_detail": {
            "$ref": "#/components/schemas/vo.PacksDetailResp"
          },
          "pack2_detail": {
            "$ref": "#/components/schemas/vo.PacksDetailResp"
          },
          "pack_detail": {
            "$ref": "#/components/schemas/vo.PacksDetailResp"
          }
        },
        "type": "object"
      },
      "vo.PacksDetailResp": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9",
            "type": "integer"
          },
          "avatar_name": {
            "description": "名称",
            "type": "string"
          },
          "create_time": {
            "description": "任务创建时间",
            "type": "integer"
          },
          "id": {
            "description": "记录的唯一标识符",
            "type": "integer"
          },
          "max_avatar_count": {
            "description": "最大 avatar数量:0-不限制;大于0-按照实际数量限制",
            "type": "integer"
          },
          "more_count": {
            "description": "生成更多图片次数",
            "type": "integer"
          },
          "photo_tasks": {
            "description": "photo任务列表",
            "items": {
              "$ref": "#/components/schemas/vo.PacksPhotoTaskVO"
            },
            "type": "array"
          },
          "source_photo": {
            "description": "原始图片",
            "type": "string"
          },
          "status": {
            "description": "状态：1-photo生成中；2-photo生成完成；3-motion生成中；4-avatar制作中；5-完成",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.PacksListResp": {
        "properties": {
          "id": {
            "description": "记录的唯一标识符",
            "type": "integer"
          },
          "name": {
            "description": "名称",
            "type": "string"
          },
          "photo_url": {
            "description": "图片地址",
            "type": "string"
          },
          "status": {
            "description": "状态：1-photo生成中；2-photo生成完成；3-motion生成中；4-avatar制作中；4-完成",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.PacksPhotoTaskVO": {
        "properties": {
          "err_msg": {
            "description": "错误信息",
            "type": "string"
          },
          "model": {
            "description": "使用了什么模型",
            "type": "integer"
          },
          "output_url": {
            "description": "图片地址",
            "type": "string"
          },
          "photo_unique_id": {
            "description": "photo任务的唯一标识符",
            "type": "string"
          },
          "progress_desc": {
            "description": "生成状态 Generating：生成中的任务/ Queued：排队中的任务/Error：生成失败的任务/Success",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.Person": {
        "properties": {
          "avatar_library_id": {
            "type": "integer"
          },
          "avatar_type": {
            "description": "前端区分数字人类型的字段，后端只是存储，不做任何处理",
            "type": "string"
          },
          "avatar_url": {
            "description": "数字人封面图地址，前端使用",
            "type": "string"
          },
          "cover_url": {
            "description": "数字人原尺寸封面图地址，前端使用",
            "type": "string"
          },
          "h": {
            "description": "数字人在容器内的尺寸 高",
            "type": "number"
          },
          "id": {
            "type": "integer"
          },
          "person_source": {
            "type": "integer"
          },
          "w": {
            "description": "数字人在容器内的尺寸 宽",
            "type": "number"
          },
          "x": {
            "description": "数字人在容器内的位置 X轴",
            "type": "number"
          },
          "y": {
            "description": "数字人在容器内的位置 Y轴",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.PhotoTask": {
        "properties": {
          "err_msg": {
            "type": "string"
          },
          "output_url": {
            "type": "string"
          },
          "photo_unique_id": {
            "type": "string"
          },
          "progress": {
            "type": "integer"
          },
          "progress_desc": {
            "type": "string"
          },
          "task_unique_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PlaceholderScript": {
        "properties": {
          "duration": {
            "description": "持续时长",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.PodcastAvatarDraftItem": {
        "properties": {
          "err_msg": {
            "description": "错误信息",
            "type": "string"
          },
          "is_failed": {
            "description": "已完成的photo任务中是否存在失败",
            "type": "boolean"
          },
          "podcast_avatar_id": {
            "type": "integer"
          },
          "podcast_avatars": {
            "description": "长度为2的数组 一对pack",
            "items": {
              "$ref": "#/components/schemas/vo.PacksListResp"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.PodcastBackgroundListItem": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比：0=9:16，1=16:9",
            "type": "integer"
          },
          "avatar_type": {
            "description": "数字人类型",
            "type": "string"
          },
          "err_msg": {
            "description": "25aigc_photo 错误信息；非 AI 背景固定为空",
            "type": "string"
          },
          "for_stage": {
            "description": "是否仅在 Stage 使用",
            "type": "integer"
          },
          "height": {
            "description": "用户上传图片高度；公共背景为 0",
            "type": "integer"
          },
          "id": {
            "description": "公共背景 ID；用户背景固定为 0",
            "type": "integer"
          },
          "is_show": {
            "description": "是否展示",
            "type": "integer"
          },
          "label": {
            "description": "背景标签；用户背景固定为空",
            "type": "string"
          },
          "left_url": {
            "description": "左侧背景图",
            "type": "string"
          },
          "origin_url": {
            "description": "原图 URL",
            "type": "string"
          },
          "photo_unique_id": {
            "description": "AI 生图任务 ID；非 AI 背景固定为空",
            "type": "string"
          },
          "preview_url": {
            "description": "预览图 URL",
            "type": "string"
          },
          "progress": {
            "description": "25aigc_photo 任务进度；非 AI 背景固定为 0",
            "type": "integer"
          },
          "progress_desc": {
            "description": "25aigc_photo 任务状态；非 AI 背景固定为空",
            "type": "string"
          },
          "prompt": {
            "description": "背景提示词",
            "type": "string"
          },
          "reference_images": {
            "description": "AI 生图任务使用的参考图",
            "items": {
              "$ref": "#/components/schemas/vo.ReferenceImageResp"
            },
            "type": "array"
          },
          "right_url": {
            "description": "右侧背景图",
            "type": "string"
          },
          "source": {
            "description": "public/user_upload/ai_generated",
            "type": "string"
          },
          "style": {
            "description": "背景风格",
            "type": "string"
          },
          "typ": {
            "description": "背景类型：0=Speaker Focus，2=Alternating shots",
            "type": "integer"
          },
          "user_background_id": {
            "description": "用户背景表 ID；公共背景固定为 0",
            "type": "integer"
          },
          "width": {
            "description": "用户上传图片宽度；公共背景为 0",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.PodcastBackgroundListResp": {
        "properties": {
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.PodcastBackgroundListItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.PodcastCoverContextResp": {
        "properties": {
          "aspect_ratio": {
            "type": "integer"
          },
          "create_from": {
            "type": "integer"
          },
          "project_id": {
            "type": "string"
          },
          "reference_images": {
            "items": {
              "$ref": "#/components/schemas/vo.ReferenceImageResp"
            },
            "type": "array"
          },
          "script": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PodcastCoverListItem": {
        "properties": {
          "aspect_ratio": {
            "type": "integer"
          },
          "cover_id": {
            "type": "integer"
          },
          "create_time": {
            "type": "integer"
          },
          "err_msg": {
            "type": "string"
          },
          "image_url": {
            "type": "string"
          },
          "model": {
            "type": "integer"
          },
          "output_index": {
            "type": "integer"
          },
          "photo_unique_id": {
            "type": "string"
          },
          "progress": {
            "type": "integer"
          },
          "progress_desc": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "quality": {
            "type": "string"
          },
          "reference_images": {
            "items": {
              "$ref": "#/components/schemas/vo.ReferenceImageResp"
            },
            "type": "array"
          },
          "resolution": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PodcastCoverListResp": {
        "properties": {
          "has_more": {
            "type": "boolean"
          },
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.PodcastCoverListItem"
            },
            "type": "array"
          },
          "next_cursor": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.PodcastReadyToProEditTaskResultResp": {
        "properties": {
          "err_code": {
            "type": "integer"
          },
          "err_msg": {
            "type": "string"
          },
          "project_id": {
            "type": "string"
          },
          "project_info": {
            "$ref": "#/components/schemas/vo.PrjInfoPageResp"
          },
          "status": {
            "type": "integer"
          },
          "task_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PodcastRedoTTSTaskResultResp": {
        "properties": {
          "duration": {
            "type": "number"
          },
          "err_code": {
            "type": "integer"
          },
          "err_msg": {
            "type": "string"
          },
          "preview_audio_url": {
            "type": "string"
          },
          "scene_idx": {
            "type": "integer"
          },
          "scene_key": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "task_id": {
            "type": "string"
          },
          "word_seq": {
            "items": {
              "$ref": "#/components/schemas/vo.SubtitleWordSeq"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.PodcastTTSTaskResp": {
        "properties": {
          "status": {
            "type": "integer"
          },
          "task_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PodcastTemplateListResp": {
        "properties": {
          "templates": {
            "items": {
              "$ref": "#/components/schemas/vo.PodcastTemplateListRespItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.PodcastTemplateListRespItem": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9:16/1:16:9",
            "type": "integer"
          },
          "cover_url": {
            "type": "string"
          },
          "heat_value": {
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "project_id": {
            "type": "string"
          },
          "tag": {
            "type": "string"
          },
          "video_duration": {
            "type": "number"
          },
          "video_url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PrjBackgroundMusicListData": {
        "properties": {
          "duration": {
            "description": "Music duration in seconds\n@example 120",
            "type": "integer"
          },
          "id": {
            "description": "Music track ID\n@example 1001",
            "type": "integer"
          },
          "music_url": {
            "description": "Music track URL\n@example \"https://example.com/music/upbeat_corporate.mp3\"",
            "type": "string"
          },
          "name": {
            "description": "Music track name\n@example \"Upbeat Corporate\"",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PrjBackgroundMusicListResp": {
        "properties": {
          "background_music": {
            "description": "List of background music tracks",
            "items": {
              "$ref": "#/components/schemas/vo.PrjBackgroundMusicListData"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.PrjInfoCreditCheckResp": {
        "properties": {
          "avatar_lite_need_credits": {
            "description": "avatarLite分镜需要支付等",
            "type": "number"
          },
          "avatar_lite_video_duration": {
            "description": "avatarLite分镜总时长",
            "type": "number"
          },
          "avatar_x_need_credits": {
            "description": "avatarLite分镜需要支付等",
            "type": "number"
          },
          "avatar_x_video_duration": {
            "description": "avatarLite分镜总时长",
            "type": "number"
          },
          "left_credits": {
            "type": "number"
          },
          "need_credits": {
            "type": "number"
          },
          "need_upgrade": {
            "description": "是否需要提示用户升级",
            "type": "boolean"
          },
          "no_need_pay": {
            "description": "用户是否无需支付，比如 unlimited 用户无需支付非avatarx任务的消耗",
            "type": "boolean"
          },
          "primary_account": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.UserPrimaryAccountInfoResp"
              }
            ],
            "description": "主账号信息"
          },
          "subscribe_plan": {
            "type": "integer"
          },
          "text_length": {
            "description": "文案长度",
            "type": "integer"
          },
          "video_duration": {
            "description": "视频预估时长",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.PrjInfoGPTAttachment": {
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PrjInfoGPTScriptParams": {
        "properties": {
          "duration_seconds": {
            "type": "integer"
          },
          "language": {
            "type": "string"
          },
          "script_style": {
            "type": "string"
          },
          "speaker_count": {
            "type": "integer"
          },
          "target_audience": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PrjInfoPageResp": {
        "properties": {
          "a_id": {
            "type": "integer"
          },
          "aspect_ratio": {
            "description": "宽高比",
            "type": "integer"
          },
          "attachments": {
            "description": "创建时的编辑态附件列表",
            "items": {
              "$ref": "#/components/schemas/vo.PrjInfoGPTAttachment"
            },
            "type": "array"
          },
          "audio_enhancement_enabled": {
            "description": "是否启用增强音频",
            "type": "boolean"
          },
          "avatar_type": {
            "description": "单人对话数字人的数字人类型 default/pet/cartoon/baby",
            "type": "string"
          },
          "avatar_x_flag": {
            "description": "avatarX标记",
            "type": "string"
          },
          "comment": {
            "allOf": [
              {
                "$ref": "#/components/schemas/model.UserCreatedComment"
              }
            ],
            "description": "评论"
          },
          "copy_from": {
            "type": "integer"
          },
          "cover_path": {
            "description": "封面图片路径",
            "type": "string"
          },
          "cover_url": {
            "description": "封面图片url",
            "type": "string"
          },
          "create_from": {
            "description": "创建来源 22:Talking Photo",
            "type": "integer"
          },
          "created_at": {
            "description": "创建时间",
            "type": "integer"
          },
          "digital_human_all_in_one_task_id": {
            "description": "新合成任务ID，标记着是否是新任务合成",
            "type": "string"
          },
          "err_code": {
            "description": "错误码",
            "type": "string"
          },
          "err_msg": {
            "description": "错误信息",
            "type": "string"
          },
          "estimated_wait_time": {
            "description": "新增预估等待时间字段",
            "type": "number"
          },
          "first_subtitle2_layer": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TrackLayer"
              }
            ],
            "description": "当前工程文件第一个分镜中subtitle-2字幕轴的第一个元素"
          },
          "gpt_sell_text": {
            "description": "文案内容",
            "items": {
              "$ref": "#/components/schemas/vo.GetScriptListRespItem"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "image_podcast_template_id": {
            "description": "图片播客模板id",
            "type": "integer"
          },
          "index_template_id": {
            "description": "首页模板id",
            "type": "integer"
          },
          "is_demo": {
            "description": "是否是Demo视频",
            "type": "boolean"
          },
          "is_draft": {
            "description": "是否是草稿",
            "type": "integer"
          },
          "is_mine": {
            "description": "是否是当前用户所有",
            "type": "boolean"
          },
          "language": {
            "description": "脚本语言",
            "type": "string"
          },
          "long_text": {
            "description": "生成对话文案的输入文案",
            "type": "string"
          },
          "music_id": {
            "description": "音乐ID",
            "type": "integer"
          },
          "network_enabled": {
            "description": "创建时是否允许联网搜索",
            "type": "boolean"
          },
          "origin": {
            "description": "对话数字人视频任务的素材来源 1:网页 URL/2:YouTube URL/3:文档文件 URL/4:长文本/5:原文本直驱/6:上传脚本文件 URL/7:上传音频文件 URL",
            "type": "integer"
          },
          "owner_avatar": {
            "description": "创建者头像",
            "type": "string"
          },
          "owner_nick_name": {
            "description": "创建者昵称",
            "type": "string"
          },
          "person_id": {
            "description": "数字人id",
            "type": "integer"
          },
          "person_source": {
            "description": "数字人来源",
            "type": "integer"
          },
          "persons": {
            "description": "对话数字人，分选两个数字人时，选中的两个数字人",
            "items": {
              "$ref": "#/components/schemas/vo.Person"
            },
            "type": "array"
          },
          "placeholder_cover_url": {
            "description": "占位封面图片url 当有使用首页模板时填充首页模板封面；没有时填充数字人封面",
            "type": "string"
          },
          "podcast_avatar_dp_typ": {
            "description": "对话数字人类型",
            "type": "integer"
          },
          "podcast_avatar_id": {
            "description": "对话数字人id",
            "type": "integer"
          },
          "progress": {
            "description": "进度",
            "type": "integer"
          },
          "render_subtitle": {
            "description": "是否渲染字幕/1:是/2:否",
            "type": "integer"
          },
          "scene_details": {
            "description": "分镜详情列表",
            "items": {
              "$ref": "#/components/schemas/vo.PrjInfoSceneDetail"
            },
            "type": "array"
          },
          "scenes": {
            "description": "按工程文件分镜下标返回的 B-roll 素材；每项只包含 other 轴",
            "items": {
              "$ref": "#/components/schemas/vo.Scene"
            },
            "type": "array"
          },
          "script_params": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.PrjInfoGPTScriptParams"
              }
            ],
            "description": "创建时的 GPT 脚本生成参数"
          },
          "sell_text_count": {
            "description": "文案长度",
            "type": "integer"
          },
          "status": {
            "description": "状态",
            "type": "integer"
          },
          "step": {
            "description": "步骤",
            "type": "integer"
          },
          "template_id": {
            "description": "模板id",
            "type": "integer"
          },
          "template_type": {
            "description": "模板类型 \"common\"、\"\"：公共模板，\"user\"：用户模板",
            "type": "string"
          },
          "text": {
            "description": "创建时的编辑态文本，支持 {{ref:id}} 引用附件",
            "type": "string"
          },
          "timbre_configs": {
            "description": "Host音色参数配置，顺序与timbres一致；null表示沿用后端默认",
            "items": {
              "$ref": "#/components/schemas/vo.ScriptConfig"
            },
            "type": "array"
          },
          "timbres": {
            "description": "对话数字人的音色列表",
            "items": {
              "$ref": "#/components/schemas/model.PrjTimbre"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          },
          "tts_voice_id": {
            "description": "音色ID",
            "type": "string"
          },
          "updated_at": {
            "description": "创建时间",
            "type": "integer"
          },
          "url": {
            "description": "素材url",
            "type": "string"
          },
          "user_id": {
            "description": "项目所属用户id",
            "type": "integer"
          },
          "video_duration": {
            "description": "输出产物视频路径 秒",
            "type": "number"
          },
          "video_path": {
            "description": "输出产物视频路径",
            "type": "string"
          },
          "video_select_length": {
            "description": "选取的时长",
            "type": "string"
          },
          "video_url": {
            "description": "输出产物视频url",
            "type": "string"
          },
          "workspace_index": {
            "description": "使用了第几个 workspace，目前只有草稿需要这个返回值",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.PrjInfoSceneDetail": {
        "properties": {
          "duration": {
            "description": "时长(秒)",
            "type": "number"
          },
          "key": {
            "description": "分镜id标记",
            "type": "string"
          },
          "script": {
            "description": "文案",
            "type": "string"
          },
          "speaker": {
            "description": "说话人",
            "type": "string"
          },
          "tts_path": {
            "description": "TTS音频路径",
            "type": "string"
          },
          "word_seq": {
            "description": "字幕轴信息",
            "items": {
              "$ref": "#/components/schemas/vo.SubtitleWordSeq"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.PrjSettingDetailResp": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比",
            "type": "integer"
          },
          "avatar_url": {
            "type": "string"
          },
          "cover_path": {
            "type": "string"
          },
          "cover_url": {
            "type": "string"
          },
          "create_time": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "video_length": {
            "description": "选取的时长",
            "type": "string"
          },
          "video_path": {
            "type": "string"
          },
          "video_url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PrjTimbreListResp": {
        "properties": {
          "accent": {
            "description": "elevenlabs标签 口音",
            "type": "string"
          },
          "age": {
            "description": "elevenlabs标签 年龄",
            "type": "string"
          },
          "api_key": {
            "type": "string"
          },
          "args": {
            "description": "声音人参数",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "audition_path": {
            "type": "string"
          },
          "audition_url": {
            "type": "string"
          },
          "category": {
            "description": "音色类别",
            "type": "string"
          },
          "cloned_args": {
            "$ref": "#/components/schemas/model.PrjTimbreClonedArgs"
          },
          "cloned_file": {
            "description": "克隆文件",
            "type": "string"
          },
          "create_from": {
            "description": "1后台录入 2声音克隆 3视频翻译",
            "type": "integer"
          },
          "create_time": {
            "type": "integer"
          },
          "default_speed": {
            "description": "默认语速",
            "type": "number"
          },
          "desc": {
            "description": "声音人说明",
            "type": "string"
          },
          "descriptive": {
            "description": "elevenlabs标签 描述",
            "type": "string"
          },
          "external_lang_id": {
            "description": "外部音色ID",
            "type": "string"
          },
          "external_status": {
            "description": "外部状态 是否在槽位，1 正常 2 不可用",
            "type": "integer"
          },
          "gender": {
            "description": "性别 Male or Female /elevenlabs有标签的话会用 性别",
            "type": "string"
          },
          "grade": {
            "description": "0 启用； 1 禁用",
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "is_mine": {
            "description": "是否是我",
            "type": "boolean"
          },
          "is_recommend": {
            "description": "是否推荐音色：0否 1是",
            "type": "integer"
          },
          "keywords": {
            "description": "声音人关键词",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "lang": {
            "description": "cn 中文； en 英文",
            "type": "string"
          },
          "langID": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "order": {
            "type": "integer"
          },
          "ori_cloned_file": {
            "description": "原始音频",
            "type": "string"
          },
          "owner_avatar": {
            "description": "创建者头像",
            "type": "string"
          },
          "owner_nick_name": {
            "description": "创建者昵称",
            "type": "string"
          },
          "payment_id": {
            "description": "支付ID",
            "type": "string"
          },
          "provider": {
            "description": "供应商，给前端展示用的，实际供应商参考 type 字段 elevenlabs minimax hume_ai listen_hub",
            "type": "string"
          },
          "recent_voice_id": {
            "description": "最近一次克隆的voice_id",
            "type": "string"
          },
          "space_id": {
            "description": "spaceID",
            "type": "integer"
          },
          "status": {
            "description": "0 启用； 1 禁用",
            "type": "integer"
          },
          "tags": {
            "description": "标签",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "text": {
            "type": "string"
          },
          "third_api_key_id": {
            "description": "第三方音色 APIkey 记录的ID，对应third_party_voice ID",
            "type": "integer"
          },
          "type": {
            "description": "声音人类型： microsoft",
            "type": "string"
          },
          "unique_id": {
            "type": "string"
          },
          "update_time": {
            "type": "integer"
          },
          "use_case": {
            "description": "elevenlabs标签 用途",
            "type": "string"
          },
          "user_id": {
            "description": "用户ID 默认为0 非0代表用户音色",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.PrjTimbreSaveResp": {
        "properties": {
          "timbre_id": {
            "type": "integer"
          },
          "timbre_unique_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PrjTimbreVoiceDesignItem": {
        "properties": {
          "audition_url": {
            "type": "string"
          },
          "task_item_id": {
            "type": "integer"
          },
          "voice_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.PrjTimbreVoiceDesignResp": {
        "properties": {
          "batch_id": {
            "type": "string"
          },
          "task_id": {
            "type": "integer"
          },
          "voices": {
            "items": {
              "$ref": "#/components/schemas/vo.PrjTimbreVoiceDesignItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.PrjTimbreVoiceDesignSaveResp": {
        "properties": {
          "timbre_id": {
            "type": "integer"
          },
          "timbre_unique_id": {
            "type": "string"
          },
          "voice_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.ProjectConcatTTSAudioResp": {
        "properties": {
          "audio_url": {
            "description": "拼接后的音频地址",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.ProjectCopyResp": {
        "properties": {
          "new_prj_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.ProjectEmptyResp": {
        "properties": {
          "project_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.ProjectYoutubeSRTResp": {
        "properties": {
          "subtitle_url": {
            "description": "YouTube SRT字幕文件URL",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.QueryPodcastAvatarDPResp": {
        "properties": {
          "aigc_podcast_avatar_dp": {
            "allOf": [
              {
                "$ref": "#/components/schemas/model.AIGCPodcastAvatarDp"
              }
            ],
            "description": "对话数字人关联表信息（传Persons时为nil）"
          },
          "digital_person1": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.DigitalPersonDetailWithoutAvatarX"
              }
            ],
            "description": "数字人1详情"
          },
          "digital_person2": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.DigitalPersonDetailWithoutAvatarX"
              }
            ],
            "description": "数字人2详情"
          }
        },
        "type": "object"
      },
      "vo.ReferenceImageResp": {
        "properties": {
          "key": {
            "description": "类型：face/appearance/background",
            "type": "string"
          },
          "url": {
            "description": "图片URL",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.RegenerateUserPodcastBackgroundResp": {
        "properties": {
          "unique_id": {
            "description": "新建 25aigc_photo 任务的唯一 ID",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.RippleBackgroundItem": {
        "properties": {
          "background": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "err_msg": {
            "type": "string"
          },
          "height": {
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "is_demo": {
            "type": "boolean"
          },
          "output_url": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "photo_info": {
            "$ref": "#/components/schemas/vo.TaskOfPhoto"
          },
          "photo_unique_id": {
            "type": "string"
          },
          "progress_desc": {
            "type": "string"
          },
          "width": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.RippleBackgroundListResp": {
        "properties": {
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.RippleBackgroundItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.RippleImageMaterialItem": {
        "properties": {
          "category": {
            "type": "string"
          },
          "err_msg": {
            "type": "string"
          },
          "height": {
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "image_material": {
            "type": "string"
          },
          "is_demo": {
            "type": "boolean"
          },
          "output_url": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "photo_info": {
            "$ref": "#/components/schemas/vo.TaskOfPhoto"
          },
          "photo_unique_id": {
            "type": "string"
          },
          "progress_desc": {
            "type": "string"
          },
          "width": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.RippleImageMaterialListResp": {
        "properties": {
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.RippleImageMaterialItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.RippleImagePodcastTemplateItem": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9",
            "type": "integer"
          },
          "cover_url": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "is_demo": {
            "type": "boolean"
          },
          "preview_url": {
            "type": "string"
          },
          "tracks": {
            "items": {
              "$ref": "#/components/schemas/vo.Track"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.RippleImagePodcastTemplateListResp": {
        "properties": {
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.RippleImagePodcastTemplateItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.RippleWaveformInfo": {
        "properties": {
          "end": {
            "type": "number"
          },
          "start": {
            "type": "number"
          },
          "waveformNode": {
            "$ref": "#/components/schemas/vo.RippleWaveformNodeInfo"
          }
        },
        "type": "object"
      },
      "vo.RippleWaveformItem": {
        "properties": {
          "config_oss_key": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "is_demo": {
            "type": "boolean"
          },
          "waveform_info": {
            "$ref": "#/components/schemas/vo.RippleWaveformInfo"
          }
        },
        "type": "object"
      },
      "vo.RippleWaveformListResp": {
        "properties": {
          "list": {
            "items": {
              "$ref": "#/components/schemas/vo.RippleWaveformItem"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.RippleWaveformNodeInfo": {
        "properties": {
          "h": {
            "type": "integer"
          },
          "prop": {
            "$ref": "#/components/schemas/vo.RippleWaveformPropInfo"
          },
          "w": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.RippleWaveformPropInfo": {
        "properties": {
          "audioPath": {
            "type": "string"
          },
          "waveformConfig": {
            "additionalProperties": {},
            "type": "object"
          }
        },
        "type": "object"
      },
      "vo.Scene": {
        "properties": {
          "audio_script": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.AudioScript"
              }
            ],
            "description": "用户上传的音频"
          },
          "bg_color": {
            "description": "背景颜色",
            "type": "string"
          },
          "duration": {
            "description": "场景时长【此字段有二义性，我先给看到这里的你跪一个】【在ai模板中时，此字段用于标记【模板中】该场景的时长】【在用户的工程文件中，此字段表示的是【真实的】该场景时长】",
            "type": "number"
          },
          "emotion_description": {
            "description": "情绪描述，用于Hume AI/MiniMax TTS驱动",
            "type": "string"
          },
          "key": {
            "description": "前端使用唯一标记当前分镜",
            "type": "string"
          },
          "new_duration": {
            "description": "新的场景时长，只在ai模板构建前端工程文件的时候使用，前端工程文件构建完成后不再使用",
            "type": "number"
          },
          "placeholder_script": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.PlaceholderScript"
              }
            ],
            "description": "空分镜相关属性"
          },
          "script": {
            "description": "场景文案",
            "type": "string"
          },
          "script_config": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.ScriptConfig"
              }
            ],
            "description": "tts相关属性"
          },
          "script_type": {
            "description": "tts / audio / placeholder",
            "type": "string"
          },
          "speak_person": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.SceneSpeakPerson"
              }
            ],
            "description": "记录说话的是哪个数字人，这个目前是给podcast任务使用"
          },
          "speaker_order": {
            "description": "说话人顺序 1-第一个数字人轴先说话 2-第二个数字人轴先说话",
            "type": "integer"
          },
          "subtitle_info": {
            "description": "字幕轴信息",
            "items": {
              "$ref": "#/components/schemas/vo.Sentence"
            },
            "type": "array"
          },
          "tracks": {
            "description": "时间轴列表",
            "items": {
              "$ref": "#/components/schemas/vo.Track"
            },
            "type": "array"
          },
          "transition": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.Transition"
              }
            ],
            "description": "翻译"
          },
          "tts_args": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TTSArgs"
              }
            ],
            "description": "TTS配置"
          },
          "tts_axis": {
            "description": "TTS轴信息",
            "items": {
              "$ref": "#/components/schemas/model.Letter"
            },
            "type": "array"
          },
          "tts_payment_id": {
            "description": "该分镜TTS扣费支付ID",
            "type": "string"
          },
          "tts_voice_id": {
            "description": "该分镜tts的声音id",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.SceneSpeakPerson": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "person_source": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.ScriptConfig": {
        "properties": {
          "emotion": {
            "description": "Minimax emotion speed pitch",
            "type": "string"
          },
          "model_id": {
            "description": "使用的模型名称 暂时只有11labs使用 eleven_v3，eleven_flash_v2_5",
            "type": "string"
          },
          "pitch": {
            "description": "azure speed pitch",
            "type": "number"
          },
          "similarity": {
            "description": "音色相似度 /最小值为0%，最大值为100% 默认选中75%, 最小颗粒度1%",
            "type": "number"
          },
          "speaker_boost": {
            "description": "默认开启 高还原度",
            "type": "boolean"
          },
          "stability": {
            "description": "11labs speed stability similarity style_exaggeration speaker_boost",
            "type": "number"
          },
          "style_exaggeration": {
            "description": "夸大风格，越高越不稳定，低会提升合成速度",
            "type": "number"
          },
          "tts_speed": {
            "description": "废弃暂时不用 语速工程化实现",
            "type": "number"
          },
          "volume": {
            "description": "废弃暂时不用 音量工程化实现",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.Sentence": {
        "properties": {
          "end_time": {
            "type": "integer"
          },
          "start_time": {
            "type": "integer"
          },
          "text": {
            "description": "单个字幕页上的文本信息",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.SetCoverResp": {
        "properties": {
          "video_url": {
            "description": "如果操作的是已合成产物的prj，则此处会给出设置好封面后的新产物url",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.ShowTypePreset": {
        "properties": {
          "all": {
            "$ref": "#/components/schemas/vo.ShowTypePresetItem"
          },
          "circle": {
            "$ref": "#/components/schemas/vo.ShowTypePresetItem"
          }
        },
        "type": "object"
      },
      "vo.ShowTypePresetItem": {
        "properties": {
          "shape": {
            "$ref": "#/components/schemas/vo.ShowTypePresetShape"
          },
          "size": {
            "$ref": "#/components/schemas/vo.ShowTypePresetSize"
          }
        },
        "type": "object"
      },
      "vo.ShowTypePresetShape": {
        "properties": {
          "color": {
            "description": "背景颜色",
            "type": "string"
          },
          "h": {
            "description": "容器内元素高度 【相对容器尺寸，单位为百分比】",
            "type": "number"
          },
          "r": {
            "description": "容器内元素旋转角度",
            "type": "integer"
          },
          "type": {
            "description": "形状 矩形 rect、圆形 circle",
            "type": "string"
          },
          "w": {
            "description": "容器内元素宽度 【相对容器尺寸，单位为百分比】",
            "type": "number"
          },
          "x": {
            "description": "容器内元素位置x 【相对容器位置，单位为百分比】",
            "type": "number"
          },
          "y": {
            "description": "容器内元素位置y 【相对容器位置，单位为百分比】",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.ShowTypePresetSize": {
        "properties": {
          "h": {
            "type": "integer"
          },
          "w": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.SubtitleFontFamily": {
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.SubtitleWordSeq": {
        "properties": {
          "break": {
            "description": "前端使用；打断方式，默认为空, 'line' = 强制换行 ｜ 'page' = 强制换页",
            "type": "string"
          },
          "end": {
            "description": "单词结束时间，注意这个时间要以当前subtitle的开始时间为准",
            "type": "number"
          },
          "hide": {
            "description": "隐藏方式，默认为空, 'true' = 隐藏",
            "type": "boolean"
          },
          "key": {
            "description": "单词唯一标识",
            "type": "string"
          },
          "start": {
            "description": "单词开始时间，注意这个时间要以当前subtitle的开始时间为准",
            "type": "number"
          },
          "text": {
            "description": "字幕单词/单字",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TTSArgs": {
        "properties": {
          "locale": {
            "type": "string"
          },
          "style": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TaskOfMotion": {
        "properties": {
          "digital_person_count": {
            "description": "已经生成的数字人数量",
            "type": "integer"
          },
          "emotion": {
            "type": "string"
          },
          "gender": {
            "type": "string"
          },
          "gesture": {
            "type": "string"
          },
          "model": {
            "description": "使用的模型 0:runway 老模型/1:可灵1.6-标准/2:可灵1.6-高品质",
            "type": "integer"
          },
          "negative_prompt": {
            "description": "反向提示词",
            "type": "string"
          },
          "origin_url": {
            "description": "motion供应商输出的原视频",
            "type": "string"
          },
          "photo_from": {
            "description": "1:从 Photo 任务生成/2:从 Photo 库生成",
            "type": "integer"
          },
          "photo_path_url": {
            "type": "string"
          },
          "photo_unique_id": {
            "description": "photo 任务ID",
            "type": "string"
          },
          "resolution": {
            "description": "视频输出分辨率",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.TaskOfPhoto": {
        "properties": {
          "age": {
            "type": "string"
          },
          "avatar_library_id": {
            "description": "avatar_library 表ID",
            "type": "integer"
          },
          "avatar_library_name": {
            "description": "avatar_library 表名称",
            "type": "string"
          },
          "background": {
            "type": "string"
          },
          "base_photo_url": {
            "description": "基础图片（向后兼容）",
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "gender": {
            "type": "string"
          },
          "model": {
            "type": "integer"
          },
          "number_of_images": {
            "type": "integer"
          },
          "origin": {
            "description": "人种",
            "type": "string"
          },
          "photo_real": {
            "type": "boolean"
          },
          "preset_style": {
            "type": "string"
          },
          "quality": {
            "type": "string"
          },
          "reference_images": {
            "description": "参考图列表",
            "items": {
              "$ref": "#/components/schemas/vo.ReferenceImageResp"
            },
            "type": "array"
          },
          "resolution": {
            "type": "string"
          },
          "talking_pose": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TaskPageItem": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比 0:9比16/1:16比9",
            "type": "integer"
          },
          "create_time": {
            "description": "创建时间",
            "type": "integer"
          },
          "err_msg": {
            "description": "报错信息",
            "type": "string"
          },
          "id": {
            "description": "任务ID",
            "type": "integer"
          },
          "motion_info": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TaskOfMotion"
              }
            ],
            "description": "motion任务信息"
          },
          "output_url": {
            "description": "视频或者图片地址,photo是多张视频图片地址，motion是单个视频地址",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "photo_info": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TaskOfPhoto"
              }
            ],
            "description": "photo任务信息"
          },
          "photo_tasks": {
            "description": "PhotoTasks is populated for photo details so Text-to-Avatar can render\nthe root task and all Generate More children in one polling payload.",
            "items": {
              "$ref": "#/components/schemas/vo.PhotoTask"
            },
            "type": "array"
          },
          "progress_desc": {
            "description": "生成状态 Generating：生成中的任务/ Queued：排队中的任务/Error：生成失败的任务/Success",
            "type": "string"
          },
          "type": {
            "description": "任务类型，1:photo/2:motion",
            "type": "integer"
          },
          "unique_id": {
            "description": "唯一ID",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TemplateMeta": {
        "properties": {
          "is_goods_media": {
            "description": "该元素是否是商品资源",
            "type": "boolean"
          },
          "is_logo": {
            "description": "该元素是否是logo",
            "type": "boolean"
          },
          "no_need_replace": {
            "description": "元素不需要替换，元素类型为 other 的时候生效，为 true 的话不会用商品图替换该元素",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "vo.TextConfig": {
        "properties": {
          "align": {
            "type": "string"
          },
          "background": {
            "additionalProperties": {},
            "type": "object"
          },
          "color": {
            "type": "string"
          },
          "fontFamily": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "fontSize": {
            "type": "number"
          },
          "fontStyle": {
            "additionalProperties": {},
            "type": "object"
          },
          "padding": {
            "additionalProperties": {},
            "type": "object"
          },
          "shadow": {
            "additionalProperties": {},
            "type": "object"
          },
          "stroke": {
            "additionalProperties": {},
            "type": "object"
          },
          "textDecoration": {
            "type": "string"
          },
          "verticalAlign": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.Track": {
        "properties": {
          "index": {
            "description": "时间轴索引",
            "type": "integer"
          },
          "key": {
            "description": "前端使用，用于在编辑器标识轴用的，后端不管，帮忙传递即可",
            "type": "string"
          },
          "layers": {
            "description": "时间轴元素列表",
            "items": {
              "$ref": "#/components/schemas/vo.TrackLayer"
            },
            "type": "array"
          },
          "type": {
            "description": "时间轴类型 数字人person ｜ 背景音乐music ｜ tts ｜ 字幕subtitle | 字幕subtitle-2 ｜ 素材other ｜ 色块shape",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TrackLayer": {
        "properties": {
          "alpha": {
            "description": "透明度，0 为不透明",
            "type": "number"
          },
          "api_template_meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.ApiTemplateMeta"
              }
            ],
            "description": "自定义API属性，制作模板用"
          },
          "color": {
            "description": "数字人如果是头像框模式的话，需要传颜色，可以默认传#FFFFFF；非头像框模式不传",
            "type": "string"
          },
          "crop": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TrackLayerCrop"
              }
            ],
            "description": "裁剪参数"
          },
          "fit_mode": {
            "description": "元素填充方式默认为fit， fit=自适应 | fill 充满",
            "type": "string"
          },
          "flip": {
            "description": "镜像，默认为空",
            "type": "string"
          },
          "gauss": {
            "description": "高斯模糊取值范围为[0-♾️]但仅为奇数",
            "type": "integer"
          },
          "h": {
            "description": "元素高度",
            "type": "integer"
          },
          "key": {
            "description": "标识元素用",
            "type": "string"
          },
          "mode": {
            "description": "元素使用方式 def:默认，啥也不处理/sig:只播一次/alg:自动拉伸/cir:循环",
            "type": "string"
          },
          "moving_camera": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.MovingCamera"
              }
            ],
            "description": "运镜效果  从左到右=right | 从右到左=left | 从上到下=down | 从下到上=up | 从右下至左上 = left-top | 从左下至右上 =right-top | 缩小 = zoom-in | 放大 = zoom-out"
          },
          "path": {
            "description": "元素路径",
            "type": "string"
          },
          "person_cover": {
            "description": "数字人封面",
            "type": "string"
          },
          "person_preview_url": {
            "description": "数字人预览视频URL",
            "type": "string"
          },
          "preview_path": {
            "description": "预览路径",
            "type": "string"
          },
          "prop": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TrackLayerProp"
              }
            ],
            "description": "特有元素属性"
          },
          "r": {
            "description": "元素旋转角度",
            "type": "integer"
          },
          "radius": {
            "description": "元素圆角【支持字符串数字格式，或100%，100%则为圆】",
            "type": "string"
          },
          "shape": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.LayerShape"
              }
            ],
            "description": "有此对象，说明此元素是一个容器，此对象内为容器内元素的信息"
          },
          "subtitle": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.LayerSubtitle"
              }
            ],
            "description": "字幕信息"
          },
          "template_meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TemplateMeta"
              }
            ],
            "description": "自定义属性，制作模板用"
          },
          "timeline": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.LayerTimeline"
              }
            ],
            "description": "元素在时间轴上的信息"
          },
          "top_level_key": {
            "description": "全局key，用来表示不同分镜中的元素实质上是类似的元素",
            "type": "string"
          },
          "tts_audio_url": {
            "description": "TTS音频URL，驱动的时候用这个，前端播放的时候用压缩过的",
            "type": "string"
          },
          "type": {
            "description": "渲染类型:video | pic | music | person | subtitle | subtitle-2 ｜ text | other | shape ｜ img",
            "type": "string"
          },
          "volume": {
            "description": "音量, 仅类型为other",
            "type": "integer"
          },
          "w": {
            "description": "元素宽度",
            "type": "integer"
          },
          "x": {
            "description": "元素位置x",
            "type": "integer"
          },
          "y": {
            "description": "元素位置y",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerCrop": {
        "properties": {
          "h": {
            "description": "裁剪高度，默认值给个1",
            "type": "number"
          },
          "w": {
            "description": "裁剪宽度，默认值给个1",
            "type": "number"
          },
          "x": {
            "description": "裁剪位置x",
            "type": "number"
          },
          "y": {
            "description": "裁剪位置y",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerProp": {
        "properties": {
          "animationInfo": {
            "$ref": "#/components/schemas/vo.TrackLayerPropAnimationInfo"
          },
          "audioPath": {
            "description": "波纹图使用的音频地址",
            "type": "string"
          },
          "bg_transparent": {
            "description": "是否是抠像数字人",
            "type": "boolean"
          },
          "clip": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TrackLayerPropClip"
              }
            ],
            "description": "视频裁剪; 仅类型为other的video时有用"
          },
          "emotion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TrackLayerPropEmotion"
              }
            ],
            "description": "数字人情绪详情"
          },
          "meta": {
            "$ref": "#/components/schemas/vo.TrackLayerPropMeta"
          },
          "play_mode": {
            "description": "播放方式 目前都用 play-preset-1 其余枚举值: play-default:常规播放/play-immobilization:播完定格/play-match:自动填充/play-loop:循环播放",
            "type": "string"
          },
          "renderScale": {
            "description": "缩放倍数，类型为text时使用，默认为1",
            "type": "integer"
          },
          "shapeInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TrackLayerPropShapeInfo"
              }
            ],
            "description": "色块信息"
          },
          "show_type": {
            "description": "数字人展示形式 all = 全身 | circle = 头像",
            "type": "string"
          },
          "templateInfo": {
            "additionalProperties": {},
            "description": "标记字幕动效用的，后端不改内容",
            "type": "object"
          },
          "textConfig": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.TextConfig"
              }
            ],
            "description": "标记字幕样式用的，后端不改内容"
          },
          "textInfo": {
            "$ref": "#/components/schemas/vo.TrackLayerPropTextInfo"
          },
          "waveformConfig": {
            "additionalProperties": {},
            "description": "波纹图渲染参数",
            "type": "object"
          },
          "word_seq": {
            "description": "字幕轴信息",
            "items": {
              "$ref": "#/components/schemas/vo.SubtitleWordSeq"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerPropAnimationInfo": {
        "properties": {
          "cycle": {
            "$ref": "#/components/schemas/vo.TrackLayerPropAnimationInfoItem"
          },
          "enter": {
            "$ref": "#/components/schemas/vo.TrackLayerPropAnimationInfoItem"
          },
          "leave": {
            "$ref": "#/components/schemas/vo.TrackLayerPropAnimationInfoItem"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerPropAnimationInfoItem": {
        "properties": {
          "duration": {
            "type": "number"
          },
          "effectType": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerPropClip": {
        "properties": {
          "end": {
            "description": "视频裁剪结束时间",
            "type": "number"
          },
          "start": {
            "description": "视频裁剪开始时间",
            "type": "number"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerPropEmotion": {
        "properties": {
          "cover": {
            "description": "封面图",
            "type": "string"
          },
          "id": {
            "description": "情绪表ID",
            "type": "integer"
          },
          "name": {
            "description": "情绪名称",
            "type": "string"
          },
          "preview_transparent_video": {
            "description": "抠像数字人地址",
            "type": "string"
          },
          "preview_video": {
            "description": "压缩过的预览视频地址",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerPropMeta": {
        "properties": {
          "cover": {
            "description": "数字人封面",
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "origin_height": {
            "description": "原图高度",
            "type": "integer"
          },
          "origin_width": {
            "description": "原图宽度",
            "type": "integer"
          },
          "person_source": {
            "description": "数字人来源0:官方提供的数字/1:用户定制数字人",
            "type": "integer"
          },
          "playback_type": {
            "description": "仅多机位对话数字人使用；正反播模式，与合成参数的同名字段同含义",
            "type": "string"
          },
          "preview_transparent_video": {
            "description": "抠像数字人视频URL",
            "type": "string"
          },
          "preview_video": {
            "description": "数字人预览视频URL",
            "type": "string"
          },
          "show_type_preset": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.ShowTypePreset"
              }
            ],
            "description": "数字人预设的大小和位置"
          },
          "sub_type": {
            "description": "具体应用的动态字幕的类型",
            "type": "string"
          },
          "tts_url": {
            "description": "仅多机位对话数字人使用；当前数字人元素使用的音频地址",
            "type": "string"
          },
          "type": {
            "description": "[字幕类型 static:静态 / animation:动画]",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerPropShapeInfo": {
        "properties": {
          "color": {
            "description": "色块填充色",
            "type": "string"
          },
          "html": {
            "description": "色块HTML代码",
            "type": "string"
          },
          "strokeColor": {
            "description": "描边颜色",
            "type": "string"
          },
          "strokeType": {
            "description": "描边类型 solid、dotted",
            "type": "string"
          },
          "strokeWidth": {
            "description": "描边宽度",
            "type": "integer"
          },
          "type": {
            "description": "色块形状 circle、square、triangle",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.TrackLayerPropTextInfo": {
        "properties": {
          "backgroundColor": {
            "description": "背景颜色",
            "type": "string"
          },
          "color": {
            "description": "文字颜色",
            "type": "string"
          },
          "content": {
            "description": "文本内容",
            "type": "string"
          },
          "fontFamily": {
            "description": "字体",
            "type": "string"
          },
          "fontFamilyID": {
            "description": "字体ID",
            "type": "string"
          },
          "fontFileName": {
            "description": "字体文件名",
            "type": "string"
          },
          "fontSize": {
            "description": "字体大小",
            "type": "number"
          },
          "fontStyle": {
            "description": "斜体设置",
            "type": "string"
          },
          "fontWeight": {
            "description": "字体粗细 normal | bold | bolder | lighter",
            "type": "string"
          },
          "paddingBottom": {
            "description": "下内边距",
            "type": "integer"
          },
          "paddingLeft": {
            "description": "左内边距",
            "type": "integer"
          },
          "paddingRight": {
            "description": "右内边距",
            "type": "integer"
          },
          "paddingTop": {
            "description": "上内边距",
            "type": "integer"
          },
          "radius": {
            "description": "圆角",
            "type": "integer"
          },
          "strokeColor": {
            "description": "描边颜色",
            "type": "string"
          },
          "strokeWidth": {
            "description": "描边宽度",
            "type": "integer"
          },
          "textAlign": {
            "description": "文本对齐方式 left | right | center | justify",
            "type": "string"
          },
          "textDecoration": {
            "description": "’underline‘ 下划线",
            "type": "string"
          },
          "textOrientation": {
            "description": "文本方向",
            "type": "string"
          },
          "textShadowBlur": {
            "description": "文本阴影模糊度",
            "type": "number"
          },
          "textShadowColor": {
            "description": "文本阴影颜色",
            "type": "string"
          },
          "textShadowH": {
            "description": "文本阴影x轴偏移",
            "type": "number"
          },
          "textShadowV": {
            "description": "文本阴影y轴偏移",
            "type": "number"
          },
          "writingMode": {
            "description": "文本书写方向",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.Transition": {
        "properties": {
          "type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.UserCurrentSubscriptionResp": {
        "properties": {
          "coupon": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.CmzPromoteCouponsInfo"
              }
            ],
            "description": "优惠券"
          },
          "current_api_credit": {
            "description": "当前api credit",
            "type": "number"
          },
          "current_credit": {
            "description": "当前credit",
            "type": "number"
          },
          "current_dp_usage": {
            "description": "当前数字人使用量",
            "type": "integer"
          },
          "current_seat": {
            "description": "当前席位使用量",
            "type": "integer"
          },
          "enterprise_member": {
            "description": "是否企业成员",
            "type": "boolean"
          },
          "enterprise_member_detail": {
            "$ref": "#/components/schemas/vo.EnterpriseMemberItem"
          },
          "goods_name": {
            "description": "当前订阅商品名称",
            "type": "string"
          },
          "goods_sn": {
            "description": "当前订阅商品SN",
            "type": "string"
          },
          "goods_type": {
            "description": "当前订阅商品类型",
            "type": "integer"
          },
          "ltd_code": {
            "description": "ltd code",
            "type": "string"
          },
          "ltd_tier": {
            "description": "ltd tier",
            "type": "integer"
          },
          "num": {
            "description": "购买数量",
            "type": "integer"
          },
          "order_sn": {
            "description": "当前订阅order sn",
            "type": "string"
          },
          "pay_price": {
            "description": "当前订阅支付金额",
            "type": "number"
          },
          "period": {
            "description": "当前订阅有效天数",
            "type": "string"
          },
          "plan_current_credit": {
            "description": "订阅套餐剩余 credit",
            "type": "number"
          },
          "plan_info_id": {
            "description": "订阅计划信息ID",
            "type": "integer"
          },
          "plan_total_credit": {
            "description": "订阅套餐总 credit",
            "type": "number"
          },
          "primary_account": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.UserPrimaryAccountInfoResp"
              }
            ],
            "description": "主账号信息"
          },
          "privileges": {
            "allOf": [
              {
                "$ref": "#/components/schemas/model.CmzGoodsPrivileges"
              }
            ],
            "description": "补充包商品权益"
          },
          "purchase_credit": {
            "description": "购买的credit总数 当前商品credit * 购买数量",
            "type": "number"
          },
          "sell_price": {
            "description": "当前订阅销售价",
            "type": "number"
          },
          "service_days": {
            "description": "当前订阅有效天数",
            "type": "integer"
          },
          "subscribe_plan": {
            "description": "订阅计划",
            "type": "string"
          },
          "subscribe_plan_int": {
            "description": "订阅计划int值",
            "type": "integer"
          },
          "subscription_status": {
            "description": "当前订阅状态，0:无订阅 1:正在订阅中 2:已取消下一次订阅",
            "type": "integer"
          },
          "supplements": {
            "description": "补充包订单",
            "items": {
              "$ref": "#/components/schemas/vo.UserCurrentSubscriptionSupplement"
            },
            "type": "array"
          },
          "total_api_credit": {
            "description": "总api credit",
            "type": "number"
          },
          "total_credit": {
            "description": "总credit",
            "type": "number"
          },
          "total_dp_usage": {
            "description": "总数字人使用量",
            "type": "integer"
          },
          "total_order_price": {
            "description": "总订单价格，不包含优惠券",
            "type": "number"
          },
          "total_pay_price": {
            "description": "总支付金额，当前订阅计划+补充包",
            "type": "number"
          },
          "total_seat": {
            "description": "总的席位数",
            "type": "integer"
          },
          "video_count": {
            "description": "生成视频个数",
            "type": "integer"
          },
          "vip_end": {
            "description": "当前订阅结束时间",
            "type": "integer"
          },
          "vip_start": {
            "description": "当前订阅开始时间",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.UserCurrentSubscriptionSupplement": {
        "properties": {
          "goods_name": {
            "description": "补充包商品名称",
            "type": "string"
          },
          "goods_type": {
            "description": "补充包商品类型",
            "type": "integer"
          },
          "num": {
            "description": "购买数量",
            "type": "integer"
          },
          "pay_price": {
            "description": "补充包支付金额",
            "type": "number"
          },
          "privileges": {
            "allOf": [
              {
                "$ref": "#/components/schemas/model.CmzGoodsPrivileges"
              }
            ],
            "description": "补充包商品权益"
          },
          "purchase_credit": {
            "description": "购买的credit总数 当前商品credit * 购买数量",
            "type": "number"
          },
          "sell_price": {
            "description": "补充包销售价",
            "type": "number"
          },
          "status": {
            "description": "状态",
            "type": "integer"
          },
          "vip_end": {
            "description": "补充包结束时间",
            "type": "integer"
          },
          "vip_start": {
            "description": "补充包开始时间",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.UserDigitalPersonListItem": {
        "properties": {
          "activity_unique_id": {
            "description": "活动唯一标识",
            "type": "string"
          },
          "aigc_photo_from": {
            "description": "aigc数字人生成原始图片来源：1-aigc生成；2-reference",
            "type": "integer"
          },
          "aigc_photo_target": {
            "description": "aigc数字人原始图片目标值",
            "type": "string"
          },
          "app_id": {
            "description": "app_id",
            "type": "string"
          },
          "aspect_ratio": {
            "description": "宽高比/0:9比16/1:16比9",
            "type": "integer"
          },
          "auth_id": {
            "description": "授权视频表id",
            "type": "integer"
          },
          "auth_status": {
            "description": "聚合授权状态 1:授权中/2:已授权/3:授权未通过",
            "type": "integer"
          },
          "authorization_status": {
            "description": "是否同一人授权状态0:未开始/1:授权中/2:已授权/3:授权未通过",
            "type": "integer"
          },
          "avatar_type": {
            "description": "数字人类型 default/pet/cartoon/baby",
            "type": "string"
          },
          "avatar_url": {
            "type": "string"
          },
          "avatar_x_belong": {
            "description": "avatarX归属于哪个数字人",
            "type": "integer"
          },
          "avatar_x_name": {
            "description": "avatarX名称",
            "type": "string"
          },
          "avatar_x_num": {
            "description": "avatarX数量",
            "type": "integer"
          },
          "cover_url": {
            "type": "string"
          },
          "created_at": {
            "description": "创建时间",
            "type": "integer"
          },
          "deleted_at": {
            "description": "用户主动删除时间",
            "type": "integer"
          },
          "description": {
            "type": "string"
          },
          "face_center_x": {
            "type": "number"
          },
          "face_center_y": {
            "type": "number"
          },
          "face_url": {
            "type": "string"
          },
          "fail_msg": {
            "description": "失败的提示信息，给用户看这个",
            "type": "string"
          },
          "first_click": {
            "type": "integer"
          },
          "from_api": {
            "description": "True api only else False",
            "type": "boolean"
          },
          "gender": {
            "type": "integer"
          },
          "h": {
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "is_mine": {
            "description": "是否是当前用户所有",
            "type": "boolean"
          },
          "keying_status": {
            "description": "抠像状态，0:未开始/1:抠像中/2:抠像完成/3:抠像失败",
            "type": "integer"
          },
          "keying_video_url": {
            "type": "string"
          },
          "lang_voice_map": {
            "additionalProperties": {
              "$ref": "#/components/schemas/vo.VoiceInfo"
            },
            "description": "多语言音色信息",
            "type": "object"
          },
          "length": {
            "type": "number"
          },
          "make_status": {
            "description": "数字人制作状态，1:等待motion/2:排队中/3:制作中/4:制作完成/5:制作失败",
            "type": "integer"
          },
          "mask_url": {
            "type": "string"
          },
          "motion_unique_id": {
            "description": "关联的 motion UniqueID",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "operate_feedback": {
            "description": "运营反馈",
            "type": "string"
          },
          "origin_be_optimize": {
            "description": "原视频是否被优化 0:否/1:是",
            "type": "integer"
          },
          "origin_check_face_status": {
            "description": "原视频人脸检测状态 0:未开始/1:检测中/2:检测完成/3:检测失败",
            "type": "integer"
          },
          "origin_type": {
            "description": "原视频类型: 0-上传；1-record",
            "type": "integer"
          },
          "origin_url": {
            "type": "string"
          },
          "owner_avatar": {
            "description": "创建者头像",
            "type": "string"
          },
          "owner_nick_name": {
            "description": "创建者昵称",
            "type": "string"
          },
          "person_source": {
            "description": "要填入工程文件的数字人来源",
            "type": "integer"
          },
          "photo_library_unique_id": {
            "description": "关联的图片库 UniqueID",
            "type": "string"
          },
          "podcast_typ": {
            "description": "对话数字人类型 0:非对话数字人/1:对话数字人 左/2:1:对话数字人 右",
            "type": "integer"
          },
          "prefer_model": {
            "type": "string"
          },
          "preview_mask_url": {
            "type": "string"
          },
          "preview_url": {
            "type": "string"
          },
          "product_status": {
            "description": "数字人制作状态，0制作中 1成功 2失败",
            "type": "integer"
          },
          "progress": {
            "description": "进度",
            "type": "integer"
          },
          "publish": {
            "type": "integer"
          },
          "remix_avatar_unique_id": {
            "description": "remix ugcAvatar 表的 uniqueId",
            "type": "string"
          },
          "review_status": {
            "description": "正在后台审核状态 0 正常 1 后台审核中",
            "type": "integer"
          },
          "show_type": {
            "description": "数字人展示形式 all = 全身 | circle = 头像",
            "type": "string"
          },
          "show_type_preset": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.ShowTypePreset"
              }
            ],
            "description": "数字人预设的大小和位置"
          },
          "space_owner_plan_id": {
            "description": "空间所有者的计划ID",
            "type": "integer"
          },
          "status": {
            "type": "integer"
          },
          "third_party_lip": {
            "description": "是否使用第三方嘴形0:不使用/1:爱诗",
            "type": "integer"
          },
          "timbre_id": {
            "type": "integer"
          },
          "timbre_name": {
            "description": "音色名称",
            "type": "string"
          },
          "typ": {
            "description": "数字人类型0:定制数字人/1:AIGC数字人-生成/2:AIGC数字人-上传",
            "type": "integer"
          },
          "updated_at": {
            "description": "更新时间",
            "type": "integer"
          },
          "voice_clone_status": {
            "description": "声音克隆状态 1:无需克隆/2:未开始/3:克隆中/4:克隆完成/5:克隆失败",
            "type": "integer"
          },
          "voice_id": {
            "description": "VoiceID 废弃，用timbre_id替代",
            "type": "string"
          },
          "voice_info": {
            "allOf": [
              {
                "$ref": "#/components/schemas/vo.VoiceInfo"
              }
            ],
            "description": "音色信息"
          },
          "w": {
            "type": "integer"
          },
          "webm_url": {
            "type": "string"
          },
          "welcome_text": {
            "type": "string"
          },
          "welcome_url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.UserInfoRsp": {
        "properties": {
          "actual_plan": {
            "description": "实际计划等级：0-free; 1-Tier1; 2-Tier2; 3-Tier3; 4-Tier4; 5-Tier5; 100-Starter; 120-Lite; 150-Advanced; 200-Business; 250-Professional; 300-Creator; 400-Team; 500-Enterprise; 501-Xavvi",
            "type": "integer"
          },
          "avatar": {
            "description": "头像",
            "type": "string"
          },
          "avatar_x": {
            "description": "是否允许avatarX",
            "type": "boolean"
          },
          "balance": {
            "description": "余额",
            "type": "number"
          },
          "bio": {
            "description": "个人简介",
            "type": "string"
          },
          "can_edit_template": {
            "description": "是否可以编辑模板",
            "type": "boolean"
          },
          "can_trial": {
            "description": "是否可以试用",
            "type": "boolean"
          },
          "credit": {
            "description": "用户积分",
            "type": "number"
          },
          "enterprise_member": {
            "description": "是否企业成员",
            "type": "boolean"
          },
          "enterprise_member_detail": {
            "$ref": "#/components/schemas/vo.EnterpriseMemberItem"
          },
          "group": {
            "description": "用户所属组",
            "type": "string"
          },
          "has_email": {
            "description": "是否绑定邮箱",
            "type": "boolean"
          },
          "has_set_pwd": {
            "description": "是否配置密码",
            "type": "boolean"
          },
          "home_page_group": {
            "description": "A/B测试分组 1 对照组 2 实验组",
            "type": "integer"
          },
          "id": {
            "description": "用户ID",
            "type": "integer"
          },
          "invite_code": {
            "description": "邀请码",
            "type": "string"
          },
          "is_admin": {
            "description": "是否是管理员(有保存模板的权限)",
            "type": "boolean"
          },
          "is_ai_mark": {
            "description": "是否ai水印白名单",
            "type": "boolean"
          },
          "is_pay": {
            "description": "是否付费",
            "type": "integer"
          },
          "is_signup_questionnaire": {
            "description": "是否提交注册问卷",
            "type": "boolean"
          },
          "is_vip": {
            "description": "BindWechat    bool    `json:\"bind_wechat\"`",
            "type": "boolean"
          },
          "is_vip_expire": {
            "description": "是否过期",
            "type": "boolean"
          },
          "lip_sync_duration": {
            "description": "对嘴形可用秒数",
            "type": "number"
          },
          "mock_login": {
            "description": "是否可以编辑模板",
            "type": "boolean"
          },
          "need_set_pwd": {
            "description": "需要配置密码",
            "type": "boolean"
          },
          "newbie_guide_group": {
            "description": "新手引导分组 1 对照组 2 实验组",
            "type": "integer"
          },
          "nickname": {
            "description": "Mobile     string `json:\"mobile\"` // 手机号",
            "type": "string"
          },
          "plan_info_id": {
            "description": "订阅计划信息ID",
            "type": "integer"
          },
          "promote_src": {
            "description": "推广渠道",
            "type": "string"
          },
          "reg_country": {
            "description": "注册国家",
            "type": "string"
          },
          "reg_time": {
            "description": "注册时间",
            "type": "integer"
          },
          "show_id": {
            "description": "显示ID",
            "type": "string"
          },
          "status": {
            "description": "状态 normal/guest",
            "type": "string"
          },
          "subscribe_plan": {
            "description": "订阅计划",
            "type": "string"
          },
          "subscribe_plan_int": {
            "description": "订阅计划int值",
            "type": "integer"
          },
          "surplus_days": {
            "description": "过期天数",
            "type": "integer"
          },
          "tier": {
            "description": "如果是appsumo用户，则给出购买的套餐",
            "type": "integer"
          },
          "unique_id": {
            "type": "string"
          },
          "username": {
            "description": "用户名",
            "type": "string"
          },
          "vip_expire_time": {
            "description": "会员过期时间",
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.UserPodcastBackgroundItem": {
        "properties": {
          "aspect_ratio": {
            "description": "宽高比：0=9:16，1=16:9",
            "type": "integer"
          },
          "avatar_type": {
            "description": "数字人类型",
            "type": "string"
          },
          "height": {
            "description": "图片高度",
            "type": "integer"
          },
          "id": {
            "description": "用户背景记录 ID",
            "type": "integer"
          },
          "is_show": {
            "description": "固定为 1",
            "type": "integer"
          },
          "label": {
            "description": "用户背景不参与主题匹配，固定为空",
            "type": "string"
          },
          "origin_url": {
            "description": "背景原图 URL",
            "type": "string"
          },
          "preview_url": {
            "description": "背景预览图 URL",
            "type": "string"
          },
          "source": {
            "description": "固定为 user_upload",
            "type": "string"
          },
          "typ": {
            "description": "背景类型：0=Speaker Focus，2=Alternating shots",
            "type": "integer"
          },
          "width": {
            "description": "图片宽度",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.UserPrimaryAccountInfoResp": {
        "properties": {
          "credit": {
            "type": "number"
          },
          "username": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.VoiceCloneFreeCountResp": {
        "properties": {
          "free_count": {
            "description": "剩余免费声音克隆数量",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "vo.VoiceInfo": {
        "properties": {
          "age": {
            "description": "elevenlabs标签 年龄",
            "type": "string"
          },
          "gender": {
            "description": "性别 Male or Female /elevenlabs有标签的话会用 性别",
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "lang": {
            "description": "cn 中文； en 英文",
            "type": "string"
          },
          "name": {
            "description": "名称",
            "type": "string"
          },
          "preview_url": {
            "description": "试听链接",
            "type": "string"
          },
          "type": {
            "description": "声音人类型： microsoft",
            "type": "string"
          },
          "unique_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "vo.WebhookEndpoint": {
        "properties": {
          "created_at": {
            "description": "创建时间",
            "type": "integer"
          },
          "endpoint_id": {
            "description": "webhook唯一标识",
            "type": "string"
          },
          "events": {
            "description": "事件列表",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "secret": {
            "description": "密钥",
            "type": "string"
          },
          "status": {
            "description": "状态(enabled/disabled)",
            "type": "string"
          },
          "url": {
            "description": "webhook地址",
            "type": "string"
          },
          "username": {
            "description": "用户名",
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "in": "header",
        "name": "X-Api-Key",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "description": "Atomic Podcast capabilities. Credits, tasks and assets are shared with the Web account and Space.",
    "title": "Podcastor API",
    "version": "1.0.0"
  },
  "openapi": "3.0.3",
  "paths": {
    "/open/podcast/v1/account": {
      "get": {
        "description": "Get the current Web account and Space.",
        "operationId": "podcast_account",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.UserInfoRsp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "account",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/assets/upload_sign": {
      "post": {
        "description": "Get the same OSS upload signature used by Web. Upload the bytes to the returned destination, then register the asset with its corresponding asset operation.",
        "operationId": "podcast_upload_sign",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.OssSignReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.CreateTempUrlResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "upload sign",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/audio/concat": {
      "post": {
        "description": "Concatenate the current workspace's speech tracks and save the resulting audio in the existing project storage.",
        "operationId": "podcast_concat_audio",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.ProjectConcatTTSAudioReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ProjectConcatTTSAudioResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "concat audio",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/audio/download/{id}": {
      "post": {
        "description": "Get the generated audio download URL.",
        "operationId": "podcast_download_audio",
        "parameters": [
          {
            "description": "Project ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.DownloadAudioResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "download audio",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/audio/tasks": {
      "post": {
        "description": "Submit asynchronous full-script TTS and workspace preparation after save_project. Uses the Web credit balance.",
        "operationId": "podcast_prepare_audio",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.ProjectDeleteReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastTTSTaskResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "prepare audio",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/audio/tasks/result": {
      "post": {
        "description": "Poll the full-script TTS and workspace preparation task.",
        "operationId": "podcast_get_audio_task",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PodcastTTSTaskReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastReadyToProEditTaskResultResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get audio task",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/avatar": {
      "get": {
        "description": "Get Podcast avatar photo and motion task status.",
        "operationId": "podcast_get_avatar",
        "parameters": [
          {
            "description": "记录的唯一标识符",
            "in": "query",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.GetPodcastAvatarResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get avatar",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/avatar/draft": {
      "delete": {
        "description": "Delete the current user's unfinished Podcast avatar draft.",
        "operationId": "podcast_delete_avatar_draft",
        "parameters": [
          {
            "description": "记录的唯一标识符",
            "in": "query",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete avatar draft",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "get": {
        "description": "Get the current user's unfinished Podcast avatar draft.",
        "operationId": "podcast_get_avatar_draft",
        "parameters": [
          {
            "description": "数字人类型，为空时筛选default，为all时筛选pet和cartoon，其他值时筛选对应类型",
            "in": "query",
            "name": "avatar_type",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "podcast版本，有传时按AigcPacks.PodcastVersion筛选",
            "in": "query",
            "name": "podcast_version",
            "schema": {
              "enum": [
                10,
                20
              ],
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/vo.GetDraftPodcastAvatarResp"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get avatar draft",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/avatar/motion": {
      "post": {
        "description": "Generate motion for a Podcast avatar using the shared Web pipeline.",
        "operationId": "podcast_generate_avatar_motion",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PodcastAvatarGenerateReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "generate avatar motion",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/avatar/photos": {
      "post": {
        "description": "Generate additional photos for a Podcast avatar.",
        "operationId": "podcast_more_avatar_photos",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PodcastAvatarMoreReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/vo.CreatePodcastAvatarResp"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "more avatar photos",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/avatar/rename": {
      "post": {
        "description": "Rename a user Podcast avatar.",
        "operationId": "podcast_rename_avatar",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.RenamePodcastAvatarReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "rename avatar",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/avatars": {
      "get": {
        "description": "List public and user Podcast avatars by type.",
        "operationId": "podcast_list_avatars",
        "parameters": [
          {
            "description": "数字人类型：pet/cartoon/baby/all",
            "in": "query",
            "name": "avatar_type",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "宽高比 0:9比16/1:16比9",
            "in": "query",
            "name": "aspect_ratio",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ListPodcastAvatarByUserIdResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list avatars",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Generate Podcast avatar photos using Web pricing and asset ownership.",
        "operationId": "podcast_create_avatar",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.CreatePodcastAvatarReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/vo.CreatePodcastAvatarResp"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "create avatar",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/avatars/info": {
      "post": {
        "description": "Resolve selected Podcast avatar information.",
        "operationId": "podcast_query_avatar_info",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.QueryPodcastAvatarDPReq"
              }
            }
          },
          "description": "请求参数",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.QueryPodcastAvatarDPResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "query avatar info",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/avatars/{id}": {
      "delete": {
        "description": "Delete a user Podcast avatar.",
        "operationId": "podcast_delete_avatar",
        "parameters": [
          {
            "description": "demo视频的ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete avatar",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/avatars/{id}/retry": {
      "post": {
        "description": "Retry a failed Podcast avatar task.",
        "operationId": "podcast_retry_avatar",
        "parameters": [
          {
            "description": "Podcast avatar ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "retry avatar",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/backgrounds": {
      "delete": {
        "description": "Delete a user Podcast background.",
        "operationId": "podcast_delete_background",
        "parameters": [
          {
            "description": "待删除的用户背景 ID，必须为正整数",
            "in": "query",
            "name": "user_background_id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete background",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "get": {
        "description": "List shared public and current-user Podcast backgrounds.",
        "operationId": "podcast_list_backgrounds",
        "parameters": [
          {
            "description": "宽高比：0=9:16，1=16:9",
            "in": "query",
            "name": "aspect_ratio",
            "required": true,
            "schema": {
              "enum": [
                0,
                1
              ],
              "type": "integer"
            }
          },
          {
            "description": "AspectRatio 和 Typ 使用指针，是为了区分“明确传入 0”和“完全没有传入”。\n两个字段的 0 都是合法枚举值，不能使用普通 int 配合 required 校验。",
            "in": "query",
            "name": "avatar_type",
            "required": true,
            "schema": {
              "enum": [
                "default",
                "cartoon",
                "pet"
              ],
              "type": "string"
            }
          },
          {
            "description": "背景类型：0=Speaker Focus，2=Alternating shots",
            "in": "query",
            "name": "typ",
            "required": true,
            "schema": {
              "enum": [
                0,
                2
              ],
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastBackgroundListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list backgrounds",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Register an uploaded Podcast background in the shared Web library.",
        "operationId": "podcast_add_background",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.AddUserPodcastBackgroundReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.UserPodcastBackgroundItem"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "add background",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/backgrounds/regenerate": {
      "post": {
        "description": "Regenerate a background with its original settings and Web charges.",
        "operationId": "podcast_regenerate_background",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.RegenerateUserPodcastBackgroundReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.RegenerateUserPodcastBackgroundResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "regenerate background",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/capabilities": {
      "get": {
        "description": "Discover the atomic Web workflow and shared project, billing and storage identity.",
        "operationId": "podcast_capabilities",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "capabilities",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/catalogs/{kind}": {
      "get": {
        "description": "Search voices, avatars or templates from the shared Web libraries.",
        "operationId": "podcast_catalog",
        "parameters": [
          {
            "description": "voices, avatars or templates",
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "accent",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "age",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "aspect_ratio",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "capability",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "gender",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "language",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "search",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "speaker_count",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "use_case",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "catalog",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/covers": {
      "delete": {
        "description": "Delete a Podcast cover from the Space library.",
        "operationId": "podcast_delete_cover",
        "parameters": [
          {
            "in": "query",
            "name": "cover_id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete cover",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "get": {
        "description": "List Podcast covers in the shared Space library.",
        "operationId": "podcast_list_covers",
        "parameters": [
          {
            "in": "query",
            "name": "last_id",
            "schema": {
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "schema": {
              "maximum": 50,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastCoverListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list covers",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/covers/context": {
      "get": {
        "description": "Get project context for cover generation.",
        "operationId": "podcast_cover_context",
        "parameters": [
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastCoverContextResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "cover context",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/image_backgrounds": {
      "delete": {
        "description": "Delete a user image Podcast background.",
        "operationId": "podcast_delete_image_background",
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete image background",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "get": {
        "description": "List image Podcast backgrounds.",
        "operationId": "podcast_list_image_backgrounds",
        "parameters": [
          {
            "in": "query",
            "name": "category",
            "schema": {
              "enum": [
                "ALL",
                "Upload",
                "Generated",
                "Characters",
                "Elements"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.RippleBackgroundListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list image backgrounds",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Register an uploaded image Podcast background in the shared Web library.",
        "operationId": "podcast_add_image_background",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.AddRippleBackgroundReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.AddRippleBackgroundResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "add image background",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/image_templates": {
      "delete": {
        "description": "Delete a user image Podcast template.",
        "operationId": "podcast_delete_image_template",
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete image template",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "get": {
        "description": "List public and user image Podcast templates.",
        "operationId": "podcast_list_image_templates",
        "parameters": [
          {
            "description": "宽高比 0:9比16/1:16比9",
            "in": "query",
            "name": "aspect_ratio",
            "schema": {
              "enum": [
                0,
                1
              ],
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.RippleImagePodcastTemplateListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list image templates",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Create an image Podcast template in the shared Web library.",
        "operationId": "podcast_create_image_template",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.AddRippleImagePodcastTemplateReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.AddRippleImagePodcastTemplateResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "create image template",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "put": {
        "description": "Edit an image Podcast template.",
        "operationId": "podcast_update_image_template",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.UpdateRippleImagePodcastTemplateReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.AddRippleImagePodcastTemplateResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "update image template",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/image_templates/copy": {
      "post": {
        "description": "Copy an accessible image Podcast template into the shared Web library.",
        "operationId": "podcast_copy_image_template",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.EditAsNewRippleImagePodcastTemplateReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.AddRippleImagePodcastTemplateResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "copy image template",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/images": {
      "delete": {
        "description": "Delete a user image material.",
        "operationId": "podcast_delete_image",
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete image",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "get": {
        "description": "List image Podcast materials.",
        "operationId": "podcast_list_images",
        "parameters": [
          {
            "in": "query",
            "name": "category",
            "schema": {
              "enum": [
                "ALL",
                "Upload",
                "Generated",
                "Characters",
                "Elements"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.RippleImageMaterialListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list images",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Register an uploaded image in the shared Podcast library.",
        "operationId": "podcast_add_image",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.AddRippleImageMaterialReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.AddRippleImageMaterialResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "add image",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/images/generate": {
      "post": {
        "description": "Generate Podcast images using Web pricing. Set source to podcast_background for a background or podcast_cover for covers; poll get_image_task.",
        "operationId": "podcast_generate_image",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.CreatePhotoReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "generate image",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/images/task": {
      "get": {
        "description": "Get image generation status and resulting background or cover assets.",
        "operationId": "podcast_get_image_task",
        "parameters": [
          {
            "description": "任务类型, 1:photo/2:motion",
            "in": "query",
            "name": "type",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "unique_id",
            "in": "query",
            "name": "unique_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/vo.TaskPageItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get image task",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/music": {
      "get": {
        "description": "List background music.",
        "operationId": "podcast_list_music",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjBackgroundMusicListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list music",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Register uploaded music in the shared Web library.",
        "operationId": "podcast_add_music",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.AddMusicReq"
              }
            }
          },
          "description": "Music",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjBackgroundMusicListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "add music",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/music/custom": {
      "get": {
        "description": "List user background music.",
        "operationId": "podcast_list_user_music",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjBackgroundMusicListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list user music",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/project": {
      "get": {
        "description": "Get project script, task status, assets and completed video URL.",
        "operationId": "podcast_get_project",
        "parameters": [
          {
            "in": "query",
            "name": "index",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "podcast_template_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjInfoPageResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get project",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/project/copy": {
      "post": {
        "description": "Copy an existing project for further editing.",
        "operationId": "podcast_copy_project",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.ProjectIDReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ProjectCopyResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "copy project",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/project/cover": {
      "post": {
        "description": "Set the project's cover.",
        "operationId": "podcast_set_cover",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.SetCoverReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.SetCoverResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "set cover",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/project/delete": {
      "post": {
        "description": "Delete a project from the current Space.",
        "operationId": "podcast_delete_project",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.ProjectDeleteReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete project",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/project/retry": {
      "post": {
        "description": "Retry a failed project using the existing Web retry and compensation rules.",
        "operationId": "podcast_retry_project",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.ProjectRetryReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "retry project",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/project/settings": {
      "get": {
        "description": "Get the saved Podcast project settings.",
        "operationId": "podcast_get_settings",
        "parameters": [
          {
            "in": "query",
            "name": "index",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "podcast_template_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjSettingDetailResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get settings",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      },
      "post": {
        "description": "Save script scenes, host voices, avatars, B-roll, subtitles, layout and audio enhancement settings.",
        "operationId": "podcast_save_project",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.SavePodcastAvatarInfoReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "save project",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/project/title": {
      "put": {
        "description": "Rename a project in the current Space.",
        "operationId": "podcast_rename_project",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PutTitleReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "rename project",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/projects": {
      "get": {
        "description": "List Podcast projects in the current Space.",
        "operationId": "podcast_list_projects",
        "parameters": [
          {
            "description": "项目创建来源",
            "in": "query",
            "name": "create_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "项目展示类型",
            "in": "query",
            "name": "display_type",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "文件夹ID",
            "in": "query",
            "name": "folder_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "获取page，请调用GetPage方法",
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "获取page_size，请调用GetPageSize方法",
            "in": "query",
            "name": "page_size",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ListPodcastResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list projects",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      },
      "post": {
        "description": "Create a Podcast script project from text, URLs, documents, a script, or audio. Poll get_project for script readiness.",
        "operationId": "podcast_create_project",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.CreatePodcastProjectReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/vo.ProjectEmptyResp"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "create project",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      },
      "put": {
        "description": "Update project input and regenerate its script using prj_id.",
        "operationId": "podcast_regenerate_script",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.CreatePodcastProjectReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/vo.ProjectEmptyResp"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "regenerate script",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/render": {
      "post": {
        "description": "Render prepared Podcast workspaces using the Web render pipeline. Poll get_project for completion and video URL.",
        "operationId": "podcast_render",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.BranchRenderReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "render",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/render/credit_check": {
      "post": {
        "description": "Check render credit requirements against the shared Web balance.",
        "operationId": "podcast_render_credit_check",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.RenderCreditCheckReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjInfoCreditCheckResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "render credit check",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/sources/check": {
      "post": {
        "description": "Validate a Podcast source URL.",
        "operationId": "podcast_check_source",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.CheckURLReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.CheckURLResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "check source",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/speech/tasks": {
      "post": {
        "description": "Regenerate one Podcast scene's speech asynchronously with the shared Web billing and subtitles.",
        "operationId": "podcast_redo_speech",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PodcastRedoTTSReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastTTSTaskResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "redo speech",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/speech/tasks/result": {
      "post": {
        "description": "Poll a scene speech regeneration task.",
        "operationId": "podcast_get_speech_task",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PodcastTTSTaskReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastRedoTTSTaskResultResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get speech task",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/subscription": {
      "get": {
        "description": "Get the shared Web subscription and remaining credits.",
        "operationId": "podcast_subscription",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.UserCurrentSubscriptionResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "subscription",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/subtitles/export": {
      "post": {
        "description": "Export the project's subtitles as SRT.",
        "operationId": "podcast_export_subtitles",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.ProjectRetryReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ProjectYoutubeSRTResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "export subtitles",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/templates": {
      "get": {
        "description": "List Podcast templates.",
        "operationId": "podcast_list_templates",
        "parameters": [
          {
            "description": "项目创建来源，可选",
            "in": "query",
            "name": "create_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "模板用途，可选",
            "in": "query",
            "name": "usage",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PodcastTemplateListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list templates",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/voice": {
      "get": {
        "description": "Get details and preview audio for an accessible voice.",
        "operationId": "podcast_get_voice",
        "parameters": [
          {
            "description": "音色表主键id",
            "in": "query",
            "name": "timbre_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "音色ID",
            "in": "query",
            "name": "tts_voice_id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/model.PrjTimbre"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get voice",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/voices": {
      "get": {
        "description": "List available public voices.",
        "operationId": "podcast_list_voices",
        "parameters": [
          {
            "description": "elevenlabs标签 口音",
            "in": "query",
            "name": "accent",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "age",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "favorite",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "性别 Male or Female",
            "in": "query",
            "name": "gender",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "language",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "language_only",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "provider",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "search",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "uid",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "elevenlabs标签 用途",
            "in": "query",
            "name": "use_case",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ListTimbreResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list voices",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/voices/clone": {
      "post": {
        "description": "Clone a voice into the shared Web voice library with existing Web charges.",
        "operationId": "podcast_clone_voice",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PrjTimbreCloneReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "clone voice",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/voices/clone/allowance": {
      "get": {
        "description": "Get the Web account's remaining free voice clones.",
        "operationId": "podcast_voice_clone_allowance",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.VoiceCloneFreeCountResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "voice clone allowance",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/voices/custom": {
      "get": {
        "description": "List user voices from the shared Web asset library.",
        "operationId": "podcast_list_user_voices",
        "parameters": [
          {
            "description": "elevenlabs标签 口音",
            "in": "query",
            "name": "accent",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "age",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "favorite",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "性别 Male or Female",
            "in": "query",
            "name": "gender",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "language",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "language_only",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "provider",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "search",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "uid",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "elevenlabs标签 用途",
            "in": "query",
            "name": "use_case",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ListTimbreResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list user voices",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/voices/design": {
      "post": {
        "description": "Generate candidate voices from a description using the same Web allowance and provider.",
        "operationId": "podcast_design_voice",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PrjTimbreVoiceDesignReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjTimbreVoiceDesignResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "design voice",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.generate"
      }
    },
    "/open/podcast/v1/voices/design/save": {
      "post": {
        "description": "Save a designed voice to the shared Web voice library.",
        "operationId": "podcast_save_designed_voice",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PrjTimbreVoiceDesignSaveReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjTimbreVoiceDesignSaveResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "save designed voice",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/voices/elevenlabs": {
      "get": {
        "description": "Search ElevenLabs voices available to the current Web account.",
        "operationId": "podcast_list_elevenlabs_voices",
        "parameters": [
          {
            "in": "query",
            "name": "accent",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "age",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "项目创建来源",
            "in": "query",
            "name": "create_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "项目展示类型",
            "in": "query",
            "name": "display_type",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "favorite",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "文件夹ID",
            "in": "query",
            "name": "folder_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "gender",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_azure",
            "schema": {
              "default": true,
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "include_minimax",
            "schema": {
              "default": true,
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "language",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "language_code",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "获取page，请调用GetPage方法",
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "获取page_size，请调用GetPageSize方法",
            "in": "query",
            "name": "page_size",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "provider",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "search",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sort",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Elevenlabs，Azure，Minimax, listen_hub",
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "use_cases",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ListTimbreElevenlabsResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list elevenlabs voices",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Resolve and save an ElevenLabs voice for project use.",
        "operationId": "podcast_save_elevenlabs_voice",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.PrjTimbreSaveReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.PrjTimbreSaveResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "save elevenlabs voice",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/voices/elevenlabs/labels": {
      "get": {
        "description": "Get ElevenLabs voice filter options.",
        "operationId": "podcast_elevenlabs_labels",
        "parameters": [
          {
            "in": "query",
            "name": "language_code",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.LabelEnumElevenlabsResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "elevenlabs labels",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/voices/labels": {
      "get": {
        "description": "Get voice filter options.",
        "operationId": "podcast_voice_labels",
        "parameters": [
          {
            "description": "语言",
            "in": "query",
            "name": "language",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.LabelEnumResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "voice labels",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      }
    },
    "/open/podcast/v1/waveforms": {
      "delete": {
        "description": "Delete a user waveform.",
        "operationId": "podcast_delete_waveform",
        "parameters": [
          {
            "in": "query",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete waveform",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "get": {
        "description": "List image Podcast waveforms.",
        "operationId": "podcast_list_waveforms",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.RippleWaveformListResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list waveforms",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.read"
      },
      "post": {
        "description": "Create a reusable waveform.",
        "operationId": "podcast_add_waveform",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.AddRippleWaveformReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.AddRippleWaveformResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "add waveform",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      },
      "put": {
        "description": "Update a user waveform.",
        "operationId": "podcast_update_waveform",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.UpdateRippleWaveformReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.AddRippleWaveformResp"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "update waveform",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "asset.write"
      }
    },
    "/open/podcast/v1/webhook_events": {
      "get": {
        "description": "Discover supported Webhook events.",
        "operationId": "podcast_webhook_events",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ListEventsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "webhook events",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      }
    },
    "/open/podcast/v1/webhooks": {
      "get": {
        "description": "List the account's shared Webhook subscriptions.",
        "operationId": "podcast_list_webhooks",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.ListWebhookResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "list webhooks",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      },
      "post": {
        "description": "Subscribe to the events supported by the existing Web Webhook service.",
        "operationId": "podcast_create_webhook",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.AddWebhookRequest"
              }
            }
          },
          "description": "webhook信息",
          "required": true,
          "x-originalParamName": "data"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.WebhookEndpoint"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "create webhook",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/webhooks/{endpoint_id}": {
      "delete": {
        "description": "Delete an account Webhook subscription.",
        "operationId": "podcast_delete_webhook",
        "parameters": [
          {
            "description": "webhook ID",
            "in": "path",
            "name": "endpoint_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "delete webhook",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      },
      "put": {
        "description": "Update an account Webhook subscription.",
        "operationId": "podcast_update_webhook",
        "parameters": [
          {
            "description": "webhook ID",
            "in": "path",
            "name": "endpoint_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.UpdateWebhookRequest"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.WebhookEndpoint"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "update webhook",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/workspace": {
      "get": {
        "description": "Read the project's editable workspace after audio preparation.",
        "operationId": "podcast_get_workspace",
        "parameters": [
          {
            "in": "query",
            "name": "index",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/echo.JSON"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/vo.FrontEndTemplate"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "get workspace",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.read"
      },
      "put": {
        "description": "Save an edited project workspace draft.",
        "operationId": "podcast_save_workspace",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.RanderReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "save workspace",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    },
    "/open/podcast/v1/workspace/apply": {
      "put": {
        "description": "Apply a saved workspace draft to the project.",
        "operationId": "podcast_apply_workspace",
        "parameters": [
          {
            "description": "Replay a completed identical request without repeating side effects.",
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "maxLength": 128,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/dto.ProjectIDReq"
              }
            }
          },
          "description": "请求体",
          "required": true,
          "x-originalParamName": "req"
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/echo.JSON"
                }
              }
            },
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ],
        "summary": "apply workspace",
        "tags": [
          "Podcast"
        ],
        "x-required-scope": "podcast.write"
      }
    }
  },
  "servers": [
    {
      "url": "https://api-services.podcastor.ai",
      "description": "Podcastor API"
    }
  ]
}
