Add support for start and end frames.
This commit is contained in:
@@ -30,7 +30,9 @@
|
||||
|
||||
### 4. Volcengine Doubao Seedance - 豆包Seedance视频生成节点 (新增)
|
||||
- 火山引擎豆包Seedance视频生成模型
|
||||
- 支持文生视频和图生视频两种模式
|
||||
- 支持文生视频、图生视频和首尾帧图生视频三种模式
|
||||
- 支持两种模型:pro和lite-i2v版本
|
||||
- lite-i2v模型支持首尾帧图生视频(传入2张图片)
|
||||
- 支持所有模型文本命令参数:分辨率、宽高比、时长、帧率等
|
||||
- 支持多种视频分辨率:480p、720p、1080p
|
||||
- 支持9种宽高比和2种特殊比例模式
|
||||
@@ -99,10 +101,10 @@ pip install -r requirements.txt
|
||||
2. 添加 `Volcengine Doubao Seedance` 节点
|
||||
3. 配置参数:
|
||||
- **ark_api_key**: 火山方舟API密钥
|
||||
- **model**: 模型ID (默认doubao-seedance-1-0-pro-250528)
|
||||
- **model**: 模型ID (doubao-seedance-1-0-pro-250528 或 doubao-seedance-1-0-lite-i2v-250428)
|
||||
- **prompt**: 视频生成提示词,支持中英文
|
||||
- **image**: 输入图片 (可选,图生视频模式)
|
||||
- **image_role**: 图片角色 (可选,first_frame或last_frame)
|
||||
- **first_frame**: 首帧图片 (可选,图生视频模式)
|
||||
- **last_frame**: 尾帧图片 (可选,首尾帧图生视频模式)
|
||||
- **resolution**: 视频分辨率 (可选,480p/720p/1080p)
|
||||
- **ratio**: 视频宽高比 (可选,9种比例+特殊模式)
|
||||
- **duration**: 视频时长 (可选,5秒或10秒)
|
||||
@@ -189,13 +191,25 @@ pip install -r requirements.txt
|
||||
- 16fps → 较低帧率
|
||||
- 24fps → 标准帧率(默认)
|
||||
|
||||
- **图片角色**(图生视频模式):
|
||||
- first_frame → 首帧图片(默认)
|
||||
- last_frame → 尾帧图片
|
||||
- **图片输入方式**(图生视频模式):
|
||||
- first_frame → 首帧图片输入
|
||||
- last_frame → 尾帧图片输入
|
||||
|
||||
- **模型选择**:
|
||||
- doubao-seedance-1-0-pro-250528 → 专业版模型,支持文生视频和单图生视频
|
||||
- doubao-seedance-1-0-lite-i2v-250428 → 轻量版图生视频模型,支持首尾帧图生视频
|
||||
|
||||
- **使用模式**:
|
||||
- 文生视频:仅输入提示词
|
||||
- 首帧图生视频:连接first_frame输入+提示词
|
||||
- 尾帧图生视频:连接last_frame输入+提示词
|
||||
- 首尾帧图生视频:连接first_frame和last_frame输入+提示词(推荐使用lite-i2v模型)
|
||||
|
||||
- **使用建议**:
|
||||
- 提示词描述要清晰具体,避免过于抽象
|
||||
- 图生视频模式下,输入图片质量会影响生成效果
|
||||
- 首尾帧模式下,两张图片的宽高比应该一致,系统会以首帧为准自动裁剪尾帧
|
||||
- 参数名称直观:first_frame表示首帧,last_frame表示尾帧,用户一目了然
|
||||
- 建议根据实际需求选择合适的分辨率和时长
|
||||
- 使用keep_ratio或adaptive可以更好地适配输入图片
|
||||
|
||||
@@ -251,8 +265,11 @@ pip install -r requirements.txt
|
||||
### Doubao Seedance 特定注意事项 (新增)
|
||||
- 视频生成为异步处理,通常需要几分钟时间
|
||||
- 程序会自动轮询查询结果,请耐心等待
|
||||
- 支持文生视频和图生视频两种模式
|
||||
- 支持文生视频、图生视频和首尾帧图生视频三种模式
|
||||
- 图生视频模式下,输入图片质量会影响生成效果
|
||||
- 首尾帧模式需要使用lite-i2v模型,连接first_frame和last_frame两个输入
|
||||
- 首尾帧图片的宽高比不一致时,以首帧图片为主,尾帧会自动裁剪适配
|
||||
- 参数名称已优化:first_frame和last_frame直观明确,无需额外的角色设置
|
||||
- 生成的视频URL有效期为24小时,请及时下载保存
|
||||
- 输入图片和提示词需要通过内容审核
|
||||
- 建议根据实际用途选择合适的分辨率和时长参数
|
||||
@@ -290,6 +307,8 @@ pip install -r requirements.txt
|
||||
- **提示词审核未通过**: 检查提示词内容是否符合平台规范
|
||||
- **图片审核未通过**: 检查输入图片内容是否符合平台规范
|
||||
- **参数错误**: 确认所有参数值是否在支持范围内
|
||||
- **首尾帧图片错误**: 使用首尾帧模式时确保正确连接first_frame和last_frame输入
|
||||
- **模型与功能不匹配**: pro模型不支持首尾帧,lite-i2v模型专为图生视频设计
|
||||
- **任务超时**: 可能服务器繁忙,可稍后重试
|
||||
- **视频生成失败**: 检查提示词和参数设置,重新尝试
|
||||
- **下载失败**: 网络连接问题,检查网络状态
|
||||
@@ -321,7 +340,8 @@ pip install -r requirements.txt
|
||||
- 支持异步任务提交和轮询查询机制
|
||||
- 完整的模型文本命令参数支持
|
||||
- 智能图片格式转换和Base64编码
|
||||
- 支持文生视频和图生视频两种模式
|
||||
- 支持文生视频、图生视频和首尾帧图生视频三种模式
|
||||
- 支持多张图片输入和角色配置
|
||||
- 完善的错误处理和重试机制
|
||||
- 视频文件自动下载和命名管理
|
||||
- 支持所有官方模型参数配置
|
||||
|
||||
@@ -23,7 +23,7 @@ class VolcengineDoubaoSeedance:
|
||||
"multiline": False,
|
||||
"tooltip": "火山方舟API密钥"
|
||||
}),
|
||||
"model": (["doubao-seedance-1-0-pro-250528"], {
|
||||
"model": (["doubao-seedance-1-0-pro-250528", "doubao-seedance-1-0-lite-i2v-250428"], {
|
||||
"default": "doubao-seedance-1-0-pro-250528",
|
||||
"tooltip": "模型ID"
|
||||
}),
|
||||
@@ -34,12 +34,11 @@ class VolcengineDoubaoSeedance:
|
||||
}),
|
||||
},
|
||||
"optional": {
|
||||
"image": ("IMAGE", {
|
||||
"tooltip": "输入图片(图生视频模式)"
|
||||
"first_frame": ("IMAGE", {
|
||||
"tooltip": "首帧图片(图生视频模式)"
|
||||
}),
|
||||
"image_role": (["first_frame", "last_frame"], {
|
||||
"default": "first_frame",
|
||||
"tooltip": "图片角色:首帧或尾帧"
|
||||
"last_frame": ("IMAGE", {
|
||||
"tooltip": "尾帧图片(首尾帧图生视频模式,配合lite-i2v模型使用)"
|
||||
}),
|
||||
"resolution": (["480p", "720p", "1080p"], {
|
||||
"default": "720p",
|
||||
@@ -264,7 +263,7 @@ class VolcengineDoubaoSeedance:
|
||||
print(f"下载视频时发生错误: {str(e)}")
|
||||
return None
|
||||
|
||||
def generate_video(self, ark_api_key, model, prompt, image=None, image_role="first_frame",
|
||||
def generate_video(self, ark_api_key, model, prompt, first_frame=None, last_frame=None,
|
||||
resolution="720p", ratio="adaptive", duration=5, framepersecond=24,
|
||||
watermark=False, seed=-1, camerafixed=False, filename_prefix="doubao_seedance"):
|
||||
"""主要的视频生成函数"""
|
||||
@@ -292,23 +291,55 @@ class VolcengineDoubaoSeedance:
|
||||
"text": text_with_commands
|
||||
})
|
||||
|
||||
# 如果有图片,添加图片内容(图生视频模式)
|
||||
if image is not None:
|
||||
print("检测到输入图片,使用图生视频模式")
|
||||
image_base64 = self.image_to_base64(image)
|
||||
|
||||
image_content = {
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": image_base64
|
||||
# 处理图片输入(图生视频模式)
|
||||
if first_frame is not None or last_frame is not None:
|
||||
if first_frame is not None and last_frame is not None:
|
||||
print("检测到首尾帧图片,使用首尾帧图生视频模式")
|
||||
# 处理首帧图片
|
||||
first_frame_base64 = self.image_to_base64(first_frame)
|
||||
first_frame_content = {
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": first_frame_base64
|
||||
},
|
||||
"role": "first_frame"
|
||||
}
|
||||
}
|
||||
|
||||
# 如果指定了图片角色,添加role字段
|
||||
if image_role in ["first_frame", "last_frame"]:
|
||||
image_content["role"] = image_role
|
||||
|
||||
content_list.append(image_content)
|
||||
content_list.append(first_frame_content)
|
||||
|
||||
# 处理尾帧图片
|
||||
last_frame_base64 = self.image_to_base64(last_frame)
|
||||
last_frame_content = {
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": last_frame_base64
|
||||
},
|
||||
"role": "last_frame"
|
||||
}
|
||||
content_list.append(last_frame_content)
|
||||
|
||||
elif first_frame is not None:
|
||||
print("检测到首帧图片,使用图生视频模式")
|
||||
first_frame_base64 = self.image_to_base64(first_frame)
|
||||
first_frame_content = {
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": first_frame_base64
|
||||
},
|
||||
"role": "first_frame"
|
||||
}
|
||||
content_list.append(first_frame_content)
|
||||
|
||||
elif last_frame is not None:
|
||||
print("检测到尾帧图片,使用图生视频模式")
|
||||
last_frame_base64 = self.image_to_base64(last_frame)
|
||||
last_frame_content = {
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": last_frame_base64
|
||||
},
|
||||
"role": "last_frame"
|
||||
}
|
||||
content_list.append(last_frame_content)
|
||||
else:
|
||||
print("使用文生视频模式")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user