"Generate images and videos via gptnb.ai. 图像:gpt-image-2 / gpt-image-2-vip(分层) / dall-e-3。视频:seedance 2.0 / 2.0 fast / 1.5 pro / 1.0 系列(doubao-seedance-*)。Use when the user asks to create/generate images, posters, layered images, videos, animations, or mentions gptnb / seedance / doubao-seedance. 支持文生图、图生视频、首尾帧视频、多模态参考视频。"
Resources
4Install
npx skillscat add yangyixxxx/gptnb-image Install via the SkillsCat registry.
gptnb 图像 & 视频生成
skill 同时承载两条管道,按用户意图分流:
| 用户诉求 | 用 | 脚本 | 端点 |
|---|---|---|---|
| 出图 / 海报 / 插画 / 元素分层 | gpt-image-2 系列 | scripts/generate.py |
one-cn2.gptnb.ai/v1/images/generations |
| 出视频 / 动画 / 短片 | seedance 系列 | scripts/seedance.py |
one-cn2.gptnb.ai/seedance2/v3/contents/generations/tasks |
两个端点的 API key 单独维护,文件分别放在 ~/.newmax/skills/gptnb-image/.api_key 和 .seedance_api_key(详见各自的「API Key 配置」段落)。
一、图像生成
通过 https://one-cn2.gptnb.ai/v1/images/generations 调用 gpt-image-2 系列生成图像。脚本兼容 OpenAI 经典 image generation 接口风格。如需切换上游可用 GPTNB_API_URL 环境变量或 --api-url 参数覆盖。
决策规则(最重要)
vip(分层)有两种用法,按用户是否提供已有图区分:
A. 文生 + 同步分层(用户没给图,让你生成 + 拆)
只要用户提到"分层 / 拆分 / 拆开 / 每个元素一张 / 图层 / layered / split"等关键词,无论是否同时要求"先生成海报",都只发一次 gpt-image-2-vip 调用,把"生成 + 拆分"写进同一个 prompt,由 vip 模型一次性返回合成图 + 各元素分层图。
- ❌ 错误:先用
gpt-image-2生成海报,再用gpt-image-2-vip分层(两次调用,且第二次无法读到第一次的像素,结果对不齐) - ✅ 正确:直接一次
gpt-image-2-vip,prompt 写成"帮我生成 X 海报,然后把生成的海报拆分成若干图像,每个元素独立拆分开,不要改变相对位置"
B. 上传图分层(用户已经有海报/插画,让你拆)
用户上传一张图(说"把这张图分层 / 拆开 / 拆成图层 / 把每个元素拆出来"等)→ 用 --input-image 走 /v1/images/edits 端点。脚本会自动 multipart 上传图片字节。
python3 scripts/generate.py \
--model gpt-image-2-vip \
--input-image /path/to/user-uploaded.png \
--prompt "把这张图按元素拆分成若干透明背景的 PNG 图层,相对位置不变"--prompt 在该模式下可省略,脚本默认用"按元素拆分、保持相对位置"的模板。
总判断
- 用户说"生成 X 海报,分层"→ A(文生 + 分层)
- 用户上传图 + 说"分层/拆开"→ B(edits 上传分层)
- 用户上传图但没说分层 → 默认走 edits 编辑模式(不带 vip)
模型
gpt-image-2(默认):单图生成,支持n/qualitygpt-image-2-vip:分层模型,单次返回多张图(把生成的画面按元素拆开,每个元素一张图,相对位置不变)。负载里不要传n/quality,需要传output_format/response_format,脚本会自动按 vip 协议构造 payloaddall-e-3等也可通过--model指定
使用方式
普通模型:
python3 scripts/generate.py --prompt "一只在月光下奔跑的银狐" --size 1536x1024 --quality highvip 分层模型(文生 + 分层,自动产出多张元素图):
python3 scripts/generate.py \
--model gpt-image-2-vip \
--prompt "蜜雪冰城和疯狂星期四的联名营销活动宣传海报,把海报拆分成若干图像,每个元素独立拆分开,不要改变相对位置" \
--size autovip 上传图分层(用户已有海报/插画,让你拆):
python3 scripts/generate.py \
--model gpt-image-2-vip \
--input-image /Users/me/Downloads/poster.png
# --prompt 不传时使用默认模板:把这张图按元素拆分成若干透明背景 PNG 图层返回的 data 数组里每个 url 都会被下载,文件名 <prefix>-<时间戳>-<序号>.png。
参数:
--prompt必填,图像描述--model默认gpt-image-2,模型名含vip时自动切到分层协议--n生成张数,1-10,默认 1(vip 模式忽略)--sizeWIDTHxHEIGHT或auto,默认auto--qualitylow/medium/high/auto,默认auto(vip 模式忽略)--output-format输出图像格式png/jpeg/webp(默认不传;vip 模式自动png)--response-formaturl或b64_json(默认不传;vip 模式自动url)--output-dir默认outputs/gptnb-image/--prefix文件名前缀,默认gptnb--raw只打印 API 原始 JSON,不下载图片--input-image本地图片路径,传入后自动切到/v1/images/edits端点(multipart 上传)。可重复传多张。搭配 vip 模型即"上传图分层"--api-key单次覆盖;优先级:CLI >GPTNB_API_KEY>~/.newmax/skills/gptnb-image/.api_key,详见下方「API Key 配置」
脚本本地校验 size 是否满足约束(16 倍数 / 最长边 ≤ 3840 / 长短比 ≤ 3:1 / 总像素 655,360–8,294,400),不合法直接报错,不打 API。size=auto 跳过校验。
API Key 配置
脚本按以下优先级解析 key:
- CLI
--api-key sk-xxx - 环境变量
GPTNB_API_KEY - 文件
~/.newmax/skills/gptnb-image/.api_key(推荐持久化方式,权限建议 600)
三者都没有时,脚本会以非零退出码报错并打印引导文案,提示用户:
前往 https://oneapi.gptnb.ai 注册账号并充值 → 在「令牌 / API Keys」页新建令牌 → 激活时务必选「api」分组(更稳,超时/限流少)→ 写入
~/.newmax/skills/gptnb-image/.api_key或export GPTNB_API_KEY=...
首次使用时如果出现该提示,直接把上述链接和步骤转告用户,特别要提醒选 api 分组,不要尝试伪造 key 继续调用。
# 一次性配置
mkdir -p ~/.newmax/skills/gptnb-image
echo "sk-xxx" > ~/.newmax/skills/gptnb-image/.api_key
chmod 600 ~/.newmax/skills/gptnb-image/.api_key输出
下载完成后打印 JSON:
{ "saved": ["outputs/gptnb-image/gptnb-20260504-153012-1.png"], "count": 1 }vip 模式会把所有图层一次性下载下来:
{
"saved": [
"outputs/gptnb-image/poster-20260504-181200-1.png",
"outputs/gptnb-image/poster-20260504-181200-2.png",
"outputs/gptnb-image/poster-20260504-181200-3.png"
],
"count": 3
}尺寸/质量速查
详见 references/sizes.md。
错误处理
HTTP 401/403:检查 API key(默认 key 失效时让用户提供新 key 或设GPTNB_API_KEY)HTTP 402/ 余额/额度错误:让用户去 gptnb 后台充值HTTP 429:减少并发或稍后重试- 内容安全错误:让用户调整 prompt
- 永远不要伪造图像或 URL;失败时如实输出状态码和错误体
二、视频生成(seedance)
通过 https://one-cn2.gptnb.ai/seedance2/v3/contents/generations/tasks 中转调用,兼容 Volcengine ark 创建/查询视频任务 API。scripts/seedance.py 处理「异步任务流」:POST 提交 → 轮询 GET → 下载产出 mp4。
决策规则
当用户提到「视频 / video / 动画 / 短片 / 拍 X 秒 / 让 XX 动起来」时,用本管道,不用 gpt-image-2。常见触发:
- ✅ "做一段 5 秒的猫咪打哈欠视频" → 文生视频
- ✅ "把这张图变成视频" / "让图里人物动起来" → 图生视频(首帧)
- ✅ "从这张图开始,到那张图结束" → 首尾帧
- ✅ "用这几张参考图合成一个视频" → 参考图(reference_image,1~9 张)
- ✅ "给视频配同步音频" → seedance 2.0 默认 generate_audio=true
⚠️ 用户没明确说要分层时不要 vip;反过来用户没说要视频时不要 seedance。两者完全不同管道。
模型
doubao-seedance-2-0-260128(默认):最新,支持文生 / 图生(首帧/首尾帧)/ 多模态参考(图+视频+音频)doubao-seedance-2-0-fast-...:更快但 1080p 不支持doubao-seedance-1-5-pro-251215:上一代 pro,支持 draft 样片- 1.0 系列若用户明确需要可指定(pro / pro-fast / lite t2v / lite i2v)
完整列表与能力速查见 references/seedance-models.md。
使用方式
文生视频:
python3 scripts/seedance.py --prompt "小猫对着镜头打哈欠" --duration 5 --resolution 720p --ratio 16:9图生视频(首帧):
python3 scripts/seedance.py \
--first-frame /path/to/poster.png \
--prompt "镜头慢慢推进,主角眨眼睛"首尾帧:
python3 scripts/seedance.py \
--first-frame /path/to/start.png \
--last-frame /path/to/end.png \
--prompt "从开始到结束的过渡"多张参考图(仅 seedance 2.0 / 2.0 fast、1.0 lite i2v):
python3 scripts/seedance.py \
--reference-image url1 \
--reference-image url2 \
--reference-image url3 \
--prompt "[图1]戴眼镜的男孩和[图2]的柯基,坐在[图3]的草坪上,3D 卡通风格"参考图 + 参考音频(仅 seedance 2.0 / 2.0 fast):
python3 scripts/seedance.py \
--reference-image /path/to/character.png \
--reference-audio /path/to/voice.wav \
--prompt '让角色说:"欢迎回来。"'关键参数
--prompt:文本提示词。中英文均可,2.0 系列额外支持日/印尼/西/葡语;中文 ≤500 字--model:模型 ID,默认doubao-seedance-2-0-260128--first-frame/--last-frame/--image:单帧图像,URL 或本地路径--reference-image/--reference-video/--reference-audio:可重复传多个,多模态参考用(注意三种场景互斥:首帧 / 首尾帧 / 参考图,不能混用)--resolution:480p/720p/1080p--ratio:16:9/9:16/1:1/3:4/4:3/21:9/adaptive--duration:时长秒数。2.0 系列 [4,15] 或 -1(自适应),1.5 pro [4,12],1.0 系列 [2,12]--seed:随机种子,[-1, 2³²-1],-1 = 随机--watermark:true/false,默认false--camera-fixed:true/false(参考图与 2.0 不支持)--generate-audio:true/false(仅 2.0 / 1.5 pro 支持,默认开)--output-dir:默认outputs/seedance/--prefix:文件名前缀,默认seedance--api-key:单次覆盖--api-url:覆盖 API 地址(默认one-cn2.gptnb.ai/seedance2/...)--poll-interval:轮询间隔秒,默认 8--timeout:客户端总等待秒,默认 900(15 分钟)--raw:只提交任务、返回 task_id,不轮询/下载--task-id:跳过提交,直接查询/下载已有任务
输出
成功后打印 JSON:
{
"saved": "outputs/seedance/seedance-20260504-203012.mp4",
"task_id": "...",
"duration": 5,
"ratio": "16:9",
"resolution": "720p",
"video_url": "https://..."
}saved 是下载到本地的 mp4 路径(牛马AI 会自动渲染视频缩略图)。
API Key 配置(与图像生成单独维护)
脚本按以下优先级解析 key:
- CLI
--api-key sk-xxx - 环境变量
GPTNB_SEEDANCE_API_KEY - 文件
~/.newmax/skills/gptnb-image/.seedance_api_key(推荐,权限 600)
首次调用 seedance 时如果三者都没有,脚本会以非零退出码报错并打印引导文案,转告用户:
前往 https://oneapi.gptnb.ai 注册账号并充值(建议 ≥200 元,视频消耗大)→ 在「令牌 / API Keys」页新建一个令牌 → 激活时务必选「api」分组(更稳)→ 写入
~/.newmax/skills/gptnb-image/.seedance_api_key或export GPTNB_SEEDANCE_API_KEY=...
# 一次性配置
mkdir -p ~/.newmax/skills/gptnb-image
echo "sk-xxx" > ~/.newmax/skills/gptnb-image/.seedance_api_key
chmod 600 ~/.newmax/skills/gptnb-image/.seedance_api_key⚠️ 助手务必把"激活选 api 分组 + 视频消耗大建议余额 ≥200 元"两条同时转告,不要省略;不要尝试伪造 key 或 task 继续调用。
错误处理
HTTP 401/403:seedance key 无效或失效HTTP 402/ 余额不足:seedance 消耗较大,让用户去 gptnb 后台充值HTTP 429:限流,稍后重试或减少并发- 任务
failed:把响应体里的error信息原样转告用户 - 任务
expired:服务端任务超时(execution_expires_after默认 48 小时),通常是上游卡死,重新提交即可 - 客户端
timeout:客户端等待超时但任务仍在跑,把脚本输出的task_id给用户,可以稍后用--task-id <ID>继续查询/下载 - 永远不要伪造视频 URL 或 task ID;失败时如实输出状态码和错误体