ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

OpenMontage 照片数字人实战:基于 HeyGen Photo Avatar API 从静态照片生成会说话的视频

2026/9/10 4:39:04 拓冰建站 浏览量
OpenMontage 照片数字人实战:基于 HeyGen Photo Avatar API 从静态照片生成会说话的视频 OpenMontage 照片数字人实战基于 HeyGen Photo Avatar API 从静态照片生成会说话的视频【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage本篇技术指南以 OpenMontage 仓库中 HeyGen 技能文档photo-avatars.md为核心骨架系统讲解如何通过 HeyGen Photo AvatarTalking Photos会说话的照片API将一张静态人像照片动画化并生成数字人视频。读者将掌握从图片上传到talking_photo_id落地再到视频生成的完整调用链、Avatar IV 免建组直出方案、AI 合成照片数字人的 8 字段生成规范以及照片素材要求与质量最佳实践同时结合仓库内 HeyGen 工具实现 与 共享 Provider 配置 了解其在 OpenMontage 开源视频生产系统中的落点。Photo Avatar 是什么Photo Avatar又称 Talking Photos是 HeyGen 提供的一项照片驱动数字人能力输入一张静态人像照片由云端模型将其动画化——驱动唇形、头部姿态与微表情使其开口说话。它特别适合从证件照、头像照或任意合适的人像图中批量生成个性化视频内容例如产品演示主播、课程讲师、营销口播等场景。核心工作流只有三步Upload Image → Create Avatar Group → Use in Video即先把照片上传到 HeyGen 资产中心拿到image_key再用image_key创建照片数字人分组avatar group得到talking_photo_id最后在视频生成请求中引用该 ID。从上传图片创建照片数字人Step 1上传人像照片调用资产上传端点将本地照片以二进制流方式提交。响应中的image_key而不是id是下一步建组的关键参数——它本质上是该图片在对象存储S3中的路径。curl -X POST https://upload.heygen.com/v1/asset \ -H X-Api-Key: $HEYGEN_API_KEY \ -H Content-Type: image/jpeg \ --data-binary ./portrait.jpg响应示例{ code: 100, data: { id: 741299e941764988b432ed3a6757878f, name: 741299e941764988b432ed3a6757878f, file_type: image, url: https://resource2.heygen.ai/image/.../original.jpg, image_key: image/741299e941764988b432ed3a6757878f/original.jpg } }重要保存image_key字段而非id。image_key是创建照片数字人时所引用的 S3 路径id仅表示本次上传记录。完整的资产上传细节可参考 assets.md。Step 2创建照片数字人分组拿到image_key后调用建组接口云端会对照片做人像处理并生成可用的照片数字人。端点POST https://api.heygen.com/v2/photo_avatar/avatar_group/createcurl -X POST https://api.heygen.com/v2/photo_avatar/avatar_group/create \ -H X-Api-Key: $HEYGEN_API_KEY \ -H Content-Type: application/json \ -d { image_key: image/741299e941764988b432ed3a6757878f/original.jpg, name: My Photo Avatar }请求参数字段字段类型必填说明image_keystring✓上传响应返回的 S3 image keynamestring✓数字人的显示名称generation_idstring若使用 AI 生成的合成照片需回填生成 ID见下文响应示例{ error: null, data: { id: 045c260bc0364727b2cbe50442c3a5bf, image_url: https://files2.heygen.ai/..., created_at: 1771798135.777256, name: My Photo Avatar, status: pending, group_id: 045c260bc0364727b2cbe50442c3a5bf, is_motion: false, business_type: uploaded } }响应中的id与group_id相同就是后续视频生成所用的talking_photo_id。is_motion: false表示这是静态照片数字人business_type: uploaded表明素材来源为上传。Step 3轮询等待处理完成新创建的照片数字人初始状态为status: pending通常数秒内会转为completed。必须等到completed才能用于视频生成。端点GET https://api.heygen.com/v2/photo_avatar/{id}curl https://api.heygen.com/v2/photo_avatar/045c260bc0364727b2cbe50442c3a5bf \ -H X-Api-Key: $HEYGEN_API_KEYStep 4在视频生成中使用将照片数字人的id作为talking_photo_id传入视频生成接口与文本语音组合即可生成数字人口播视频const videoConfig { video_inputs: [ { character: { type: talking_photo, talking_photo_id: 045c260bc0364727b2cbe50442c3a5bf, }, voice: { type: text, input_text: Hello! This is my photo avatar speaking., voice_id: 1bd001e7e50f421d891986aad5158bc8, }, }, ], dimension: { width: 1920, height: 1080 }, };voice_id可在 voices.md 的语音列表中挑选dimension控制输出分辨率。完整的多场景视频生成参数见 video-generation.md。TypeScript 完整工作流把上述四步封装为可复用的工程化函数包含状态轮询与超时保护import fs from fs; import path from path; interface AssetUploadResponse { code: number; data: { id: string; image_key: string; url: string; }; } interface PhotoAvatarResponse { error: string | null; data: { id: string; group_id: string; image_url: string; name: string; status: string; is_motion: boolean; business_type: string; }; } async function createPhotoAvatar( imagePath: string, name: string ): Promisestring { // 1. Upload image const resolvedPath path.resolve(imagePath); const fileBuffer fs.readFileSync(resolvedPath); const uploadResponse await fetch(https://upload.heygen.com/v1/asset, { method: POST, headers: { X-Api-Key: process.env.HEYGEN_API_KEY!, Content-Type: image/jpeg, }, body: fileBuffer, }); const uploadJson: AssetUploadResponse await uploadResponse.json(); if (uploadJson.code ! 100) { throw new Error(Upload failed); } const imageKey uploadJson.data.image_key; // 2. Create avatar group const createResponse await fetch( https://api.heygen.com/v2/photo_avatar/avatar_group/create, { method: POST, headers: { X-Api-Key: process.env.HEYGEN_API_KEY!, Content-Type: application/json, }, body: JSON.stringify({ image_key: imageKey, name }), } ); const createJson: PhotoAvatarResponse await createResponse.json(); if (createJson.error) { throw new Error(createJson.error); } const photoAvatarId createJson.data.id; // 3. Wait for processing await waitForPhotoAvatar(photoAvatarId); return photoAvatarId; } async function waitForPhotoAvatar(id: string): Promisevoid { for (let i 0; i 30; i) { const response await fetch( https://api.heygen.com/v2/photo_avatar/${id}, { headers: { X-Api-Key: process.env.HEYGEN_API_KEY! } } ); const json: PhotoAvatarResponse await response.json(); if (json.data.status completed) return; if (json.data.status failed) { throw new Error(Photo avatar processing failed); } await new Promise((r) setTimeout(r, 2000)); } throw new Error(Photo avatar processing timed out); } async function createVideoFromPhoto( photoPath: string, script: string, voiceId: string ): Promisestring { // 1. Create photo avatar const talkingPhotoId await createPhotoAvatar(photoPath, Video Avatar); // 2. Generate video const response await fetch(https://api.heygen.com/v2/video/generate, { method: POST, headers: { X-Api-Key: process.env.HEYGEN_API_KEY!, Content-Type: application/json, }, body: JSON.stringify({ video_inputs: [ { character: { type: talking_photo, talking_photo_id: talkingPhotoId, }, voice: { type: text, input_text: script, voice_id: voiceId, }, }, ], dimension: { width: 1920, height: 1080 }, }), }); const { data } await response.json(); return data.video_id; }轮询逻辑值得注意循环上限 30 次、间隔 2 秒命中completed立即返回命中failed抛出异常超时兜底抛出timed out这是生产代码应具备的健壮性模板。Python 完整工作流OpenMontage 是 Python 技术栈仓库Python 版本可直接复用于 Agent 工具链。使用requests完成同样的三步调用import requests import os import time def create_photo_avatar(image_path: str, name: str) - str: api_key os.environ[HEYGEN_API_KEY] # 1. Upload image with open(image_path, rb) as f: upload_resp requests.post( https://upload.heygen.com/v1/asset, headers{ X-Api-Key: api_key, Content-Type: image/jpeg, }, dataf, ) upload_data upload_resp.json() if upload_data.get(code) ! 100: raise Exception(Upload failed) image_key upload_data[data][image_key] # 2. Create avatar group create_resp requests.post( https://api.heygen.com/v2/photo_avatar/avatar_group/create, headers{ X-Api-Key: api_key, Content-Type: application/json, }, json{image_key: image_key, name: name}, ) create_data create_resp.json() if create_data.get(error): raise Exception(create_data[error]) photo_avatar_id create_data[data][id] # 3. Wait for processing for _ in range(30): status_resp requests.get( fhttps://api.heygen.com/v2/photo_avatar/{photo_avatar_id}, headers{X-Api-Key: api_key}, ) status status_resp.json()[data][status] if status completed: return photo_avatar_id if status failed: raise Exception(Photo avatar processing failed) time.sleep(2) raise Exception(Photo avatar processing timed out)注意 Python 上传时使用dataf直接传文件句柄Content-Type: image/jpeg与 TS 版保持一致建组阶段json参数会自动序列化并设置application/json请求头。照片数字人资产管理列出已有 Talking Photos端点GET https://api.heygen.com/v1/talking_photo.listcurl https://api.heygen.com/v1/talking_photo.list \ -H X-Api-Key: $HEYGEN_API_KEY响应示例{ code: 100, data: [ { id: ef0ed70f72c6497793e5e36e434d2aea, image_url: https://files2.heygen.ai/talking_photo/.../image.WEBP, circle_image: } ] }列表中的每个id都可直接作为talking_photo_id用于视频生成——这正是复用照片数字人 ID的入口一次建组多次出片。向已有分组追加照片一个数字人分组可以包含同一人物的多套look不同着装/角度满足多场景出镜需求。端点POST https://api.heygen.com/v2/photo_avatar/avatar_group/addasync function addPhotosToGroup( groupId: string, imageKeys: string[], name: string ): Promisevoid { const response await fetch( https://api.heygen.com/v2/photo_avatar/avatar_group/add, { method: POST, headers: { X-Api-Key: process.env.HEYGEN_API_KEY!, Content-Type: application/json, }, body: JSON.stringify({ group_id: groupId, image_keys: imageKeys, name, }), } ); const json await response.json(); if (json.error) { throw new Error(json.error); } }注意这里image_keys是数组类型可一次追加多张。训练照片数字人分组训练可显著提升动画质量更自然的唇形与微表情。训练完成后动画效果会改善。端点POST https://api.heygen.com/v2/photo_avatar/traincurl -X POST https://api.heygen.com/v2/photo_avatar/train \ -H X-Api-Key: $HEYGEN_API_KEY \ -H Content-Type: application/json \ -d {group_id: 045c260bc0364727b2cbe50442c3a5bf}训练状态查询端点GET https://api.heygen.com/v2/photo_avatar/train/status/{group_id}查询与删除查询详情GET https://api.heygen.com/v2/photo_avatar/{id}返回状态与元数据删除单个数字人DELETE https://api.heygen.com/v2/photo_avatar/{id}删除整个分组DELETE https://api.heygen.com/v2/photo_avatar_group/{group_id}async function getPhotoAvatar(id: string): PromisePhotoAvatarResponse { const response await fetch( https://api.heygen.com/v2/photo_avatar/${id}, { headers: { X-Api-Key: process.env.HEYGEN_API_KEY! } } ); return response.json(); } async function deletePhotoAvatar(id: string): Promisevoid { const response await fetch( https://api.heygen.com/v2/photo_avatar/${id}, { method: DELETE, headers: { X-Api-Key: process.env.HEYGEN_API_KEY! }, } ); if (!response.ok) { throw new Error(Failed to delete photo avatar); } } async function deletePhotoAvatarGroup(groupId: string): Promisevoid { const response await fetch( https://api.heygen.com/v2/photo_avatar_group/${groupId}, { method: DELETE, headers: { X-Api-Key: process.env.HEYGEN_API_KEY! }, } ); if (!response.ok) { throw new Error(Failed to delete photo avatar group); } }Avatar IV跳过建组、直出视频Avatar IV 是 HeyGen 最新的照片数字人技术画质与动作自然度均有提升。它最大的特点是直接从已上传图片生成视频绕过 avatar group 创建与轮询环节链路更短、出片更快。端点POST https://api.heygen.com/v2/video/av4/generatecurl -X POST https://api.heygen.com/v2/video/av4/generate \ -H X-Api-Key: $HEYGEN_API_KEY \ -H Content-Type: application/json \ -d { image_key: image/741299e941764988b432ed3a6757878f/original.jpg, script: Hello! This is Avatar IV with enhanced quality., voice_id: 1bd001e7e50f421d891986aad5158bc8, video_orientation: landscape, video_title: My Avatar IV Video }请求参数字段类型必填说明image_keystring✓资产上传返回的 S3 image keyscriptstring✓数字人要说的话voice_idstring✓使用的音色 IDvideo_orientationstringportrait、landscape或squarevideo_titlestring视频标题fitstringcover或containcustom_motion_promptstring动作/表情描述enhance_custom_motion_promptboolean是否用 AI 增强动作提示词TypeScript 封装interface AvatarIVRequest { image_key: string; script: string; voice_id: string; video_orientation?: portrait | landscape | square; video_title?: string; fit?: cover | contain; custom_motion_prompt?: string; enhance_custom_motion_prompt?: boolean; } interface AvatarIVResponse { error: null | string; data: { video_id: string; }; } async function generateAvatarIVVideo( config: AvatarIVRequest ): Promisestring { const response await fetch( https://api.heygen.com/v2/video/av4/generate, { method: POST, headers: { X-Api-Key: process.env.HEYGEN_API_KEY!, Content-Type: application/json, }, body: JSON.stringify(config), } ); const json: AvatarIVResponse await response.json(); if (json.error) { throw new Error(json.error); } return json.data.video_id; }画幅与适配选项画幅分辨率典型场景portrait720x1280TikTok、短视频 Storylandscape1280x720YouTube、网页横屏square720x720Instagram 信息流适配模式说明cover填满画幅可能裁掉边缘contain完整容纳整图可能露出背景自定义动作提示词Avatar IV 允许通过custom_motion_prompt描述期望的动作与表情例如点头微笑开启enhance_custom_motion_prompt: true后AI 会基于你的描述自动润色为更丰富的动作指令const videoId await generateAvatarIVVideo({ image_key: image/.../original.jpg, script: Let me tell you about our product., voice_id: 1bd001e7e50f421d891986aad5158bc8, custom_motion_prompt: nodding head and smiling, enhance_custom_motion_prompt: true, });生成 AI 合成照片数字人除了上传真实照片HeyGen 还支持纯文本生成合成人像再将其转为数字人。该能力对需要虚拟形象但无真人素材的内容生产如虚拟讲师、匿名主播非常实用。端点POST https://api.heygen.com/v2/photo_avatar/photo/generate重要8 个字段全部必填。接口会拒绝任何缺字段的请求。当用户提出生成一个专业男士的 AI 数字人这类模糊需求时需要就以下所有字段向用户确认或代为选择合理默认值。必填字段与取值枚举字段类型允许取值namestring生成数字人的名称ageenumYoung Adult、Early Middle Age、Late Middle Age、Senior、UnspecifiedgenderenumWoman、Man、UnspecifiedethnicityenumWhite、Black、Asian American、East Asian、South East Asian、South Asian、Middle Eastern、Pacific、Hispanic、Unspecifiedorientationenumsquare、horizontal、verticalposeenumhalf_body、close_up、full_bodystyleenumRealistic、Pixar、Cinematic、Vintage、Noir、Cyberpunk、Unspecifiedappearancestring描述外观的文本提示词服装、气质、光照等最长 1000 字符curl 示例curl -X POST https://api.heygen.com/v2/photo_avatar/photo/generate \ -H X-Api-Key: $HEYGEN_API_KEY \ -H Content-Type: application/json \ -d { name: Sarah Product Demo, age: Young Adult, gender: Woman, ethnicity: White, orientation: horizontal, pose: half_body, style: Realistic, appearance: Professional woman with a friendly smile, wearing a navy blue blazer over a white blouse, soft studio lighting, clean neutral background }响应返回generation_id用于后续状态查询{ error: null, data: { generation_id: 6a7f7f2795de4599bec7cf1e06babe30 } }查询生成状态端点GET https://api.heygen.com/v2/photo_avatar/generation/{generation_id}响应会给出多张候选图片image_url_list与对应的image_key_list可挑选最满意的一张继续建组{ error: null, data: { id: 6a7f7f2795de4599bec7cf1e06babe30, status: success, image_url_list: [ https://resource2.heygen.ai/photo_generation/.../image1.jpg, https://resource2.heygen.ai/photo_generation/.../image2.jpg, https://resource2.heygen.ai/photo_generation/.../image3.jpg, https://resource2.heygen.ai/photo_generation/.../image4.jpg ], image_key_list: [ photo_generation/.../image1.jpg, photo_generation/.../image2.jpg, photo_generation/.../image3.jpg, photo_generation/.../image4.jpg ] } }TypeScript 封装interface GeneratePhotoAvatarRequest { name: string; age: Young Adult | Early Middle Age | Late Middle Age | Senior | Unspecified; gender: Woman | Man | Unspecified; ethnicity: White | Black | Asian American | East Asian | South East Asian | South Asian | Middle Eastern | Pacific | Hispanic | Unspecified; orientation: square | horizontal | vertical; pose: half_body | close_up | full_body; style: Realistic | Pixar | Cinematic | Vintage | Noir | Cyberpunk | Unspecified; appearance: string; } interface GeneratePhotoAvatarResponse { error: string | null; data: { generation_id: string; }; } interface PhotoGenerationStatus { error: string | null; data: { id: string; status: pending | processing | success | failed; msg: string | null; image_url_list?: string[]; image_key_list?: string[]; }; } async function generatePhotoAvatar( config: GeneratePhotoAvatarRequest ): Promisestring { const response await fetch( https://api.heygen.com/v2/photo_avatar/photo/generate, { method: POST, headers: { X-Api-Key: process.env.HEYGEN_API_KEY!, Content-Type: application/json, }, body: JSON.stringify(config), } ); const json: GeneratePhotoAvatarResponse await response.json(); if (json.error) { throw new Error(Photo avatar generation failed: ${json.error}); } return json.data.generation_id; } async function waitForPhotoGeneration( generationId: string ): Promisestring[] { for (let i 0; i 60; i) { const response await fetch( https://api.heygen.com/v2/photo_avatar/generation/${generationId}, { headers: { X-Api-Key: process.env.HEYGEN_API_KEY! } } ); const json: PhotoGenerationStatus await response.json(); if (json.error) throw new Error(json.error); if (json.data.status success) { return json.data.image_key_list!; } if (json.data.status failed) { throw new Error(json.data.msg ?? Photo generation failed); } await new Promise((r) setTimeout(r, 5000)); } throw new Error(Photo generation timed out); }状态轮询上限 60 次、间隔 5 秒success时返回候选image_key_list。AI 照片 → 数字人分组 → 视频全链路生成合成人像后与上传照片的流程无缝衔接挑选候选图、建组回填generation_id、等状态completed、再生成视频。// 1. Generate AI photo const generationId await generatePhotoAvatar({ name: Product Demo Host, age: Young Adult, gender: Woman, ethnicity: Unspecified, orientation: horizontal, pose: half_body, style: Realistic, appearance: Professional woman, navy blazer, friendly smile, soft lighting, }); // 2. Wait for generation and pick first result const imageKeys await waitForPhotoGeneration(generationId); const selectedImageKey imageKeys[0]; // 3. Create avatar group from the AI photo const createResponse await fetch( https://api.heygen.com/v2/photo_avatar/avatar_group/create, { method: POST, headers: { X-Api-Key: process.env.HEYGEN_API_KEY!, Content-Type: application/json, }, body: JSON.stringify({ image_key: selectedImageKey, name: Product Demo Host, generation_id: generationId, }), } ); const { data } await createResponse.json(); const talkingPhotoId data.id; // 4. Generate video (after status is completed) const videoId await generateVideo({ video_inputs: [{ character: { type: talking_photo, talking_photo_id: talkingPhotoId, }, voice: { type: text, input_text: Welcome to our product demo!, voice_id: 1bd001e7e50f421d891986aad5158bc8, }, }], dimension: { width: 1920, height: 1080 }, });生成前检查清单调用 AI 生成接口前确保 8 个字段全部有值#字段需确认的问题 / 建议默认值1name这个数字人叫什么2ageYoung Adult / Early Middle Age / Late Middle Age / Senior3genderWoman / Man4ethnicity选择哪一人种枚举见上文枚举表5orientationhorizontal横屏/ vertical竖屏/ square方形6posehalf_body推荐/ close_up / full_body7styleRealistic推荐/ Cinematic / 其他8appearance描述服装、表情、光照、背景如果用户只给了模糊描述如create a professional looking man应请用户补充缺失字段或直接采用合理默认值——例如Early Middle Age年龄、Realistic风格、half_body姿态、horizontal画幅。appearance 提示词技巧appearance是文本提示词越具体越好推荐示例Professional woman with shoulder-length brown hair, wearing a light blue button-down shirt, warm friendly smile, soft studio lighting, clean white backgroundYoung man with short black hair, casual tech startup style, wearing a dark hoodie, confident expression, modern office background with plants应避免模糊描述如a nice person互相矛盾的属性要求生成特定的真实人物照片素材要求与质量指南技术硬性要求方面要求格式JPEG、PNG分辨率最低 512x512px文件大小10MB 以内人脸可见度清晰、正面朝向质量参考指南光照——面部光照均匀自然表情——中性或轻微微笑背景——简单、不杂乱人脸位置——居中、不被裁切清晰度——锐利、对焦准确角度——正对镜头或轻微侧转最佳实践使用高质量照片——输入越好输出越好正面肖像照——动画化效果最佳中性表情——为自然动画留出空间优先 Avatar IV——使用最新一代技术获取最佳画质训练数字人分组——明显提升动画质量复用照片数字人 ID——创建一次跨多个视频重复使用同一talking_photo_id已知局限照片质量对输出效果影响显著侧面照支持有限全身照可能无法正确动画化部分表情可能显得不自然处理耗时随内容复杂度变化API 速查总表端点方法说明upload.heygen.com/v1/assetPOST上传图片返回image_key/v2/photo_avatar/avatar_group/createPOST用image_key创建照片数字人/v2/photo_avatar/avatar_group/addPOST向已有分组追加照片/v2/photo_avatar/trainPOST训练数字人分组/v2/photo_avatar/train/status/{group_id}GET查询训练状态/v2/photo_avatar/{id}GET查询照片数字人详情/状态/v2/photo_avatar/{id}DELETE删除照片数字人/v2/photo_avatar_group/{id}DELETE删除数字人分组/v2/photo_avatar/photo/generatePOST文本生成 AI 合成人像/v2/photo_avatar/generation/{id}GET查询 AI 生成状态/v2/video/av4/generatePOST由image_key直接生成 Avatar IV 视频/v1/talking_photo.listGET列出全部已有 talking photos/v2/video/generatePOST使用talking_photo_id生成视频OpenMontage 仓库中的 HeyGen 集成上述 API 指南在 OpenMontage 中并非孤立文档而是与仓库实现形成闭环技能体系定位heygen技能在仓库中已被标注为 DEPRECATED建议改用聚焦的create-video文本提示生成或avatar-video精确控制数字人/场景技能照片数字人 API 文档在两套技能中均有完整拷贝heygen 版 与 avatar-video 版内容一致均可作为参考。技能总入口见 SKILL.md其中说明了 MCP 工具优先、直接 HTTP 调用兜底的策略。工具层实现heygen_video.py 是 HeyGen 云视频生成的BaseTool实现其install_instructions明确要求设置HEYGEN_API_KEY环境变量密钥在 HeyGen 控制台 API 设置页获取get_status()也以此环境变量是否存在判断工具可用性——这与本文所有请求头中的X-Api-Key: $HEYGEN_API_KEY完全对应。Provider 矩阵tools/video/_shared.py#L15-L33 中定义了HEYGEN_PROVIDERS字典映射 VEO 3.1、Kling、Sora、Runway、Seedance、LTX 等十余个云端生成模型及其质量/速度档位并通过provider_matrix暴露给上层 Agent 编排这解释了 HeyGen 在该仓库中承担无本地 GPU 的云端视频生成通道角色supports.cloud_generation True离线渲染与隐私敏感场景除外。备选回退链路heygen_video工具的fallback_tools包含wan_video、hunyuan_video、cogvideo_video等本地/其他云端生成器当 HeyGen 不可用时系统可自动降级——这意味着照片数字人 API 的接入只需对齐统一的video_id语义即可融入既有生产管线。如需进一步探索可继续阅读同目录下的 assets.md素材上传细节、voices.md音色选择、video-generation.md多场景视频生成与 video-status.md视频状态轮询与下载。【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考