NoneLinear Image
通过运行捆绑好的无依赖 Node.js 脚本来生成或转换图像。请勿直接调用 nonelinear 或 nl 命令行工具,也不要为了处理 NoneLinear 请求而使用宿主代理的内置图像生成器。
工作流程
- 将用户要求生成或转换图像的明确请求视为进行一次可计费的 API 调用的授权。当用户仅询问能力或设置时,不要进行 API 调用。
- 根据用户意图选择操作:
generate:无参考图像。edit:恰好一个本地图片路径或公开的 HTTPS 参考图像 URL。fuse:至少两个本地路径或公开的 HTTPS 参考图像 URL。
- 提取提示词以及可选的模型、宽高比、尺寸、质量和数量。如果用户要求透明图像,则应用下方的透明图像预设。对于
gpt-image-2,质量默认设置为low,除非用户要求其他支持的值。 - 将其他请求默认设置为
gemini-2.5-flash-image。始终请求 URL 格式的输出。 - 在选择非默认模型或添加模型特定参数之前,请阅读 references/models.md 以及在需要精确限制时阅读 references/model-capabilities.json。切勿发明模型 ID 或不支持的参数。
- 定位此
SKILL.md文件所在目录下的scripts/generate-image.mjs,并使用 Node.js 18 或更高版本调用它。在 Claude Code 中,${CLAUDE_SKILL_DIR}是技能目录。在其他宿主中,请使用加载此技能时的绝对目录。 - 解析写入标准输出的单个 JSON 对象。仅当
status为completed且images包含至少一个url字段时才声明成功。 - 将图像 URL 作为可点击的链接返回。切勿返回或显示 base64 图像数据。
透明图像
将任何要求透明图像、透明背景、抠图或无背景的请求视为透明输出意图。用户无需指定 API 参数名称。内部操作:
- 使用
gpt-image-2。 - 传递
--background transparent和--output-format png。 - 确保提示词明确要求透明背景。如果用户的意图很清晰但提示词中未包含,请添加相关措辞。
- 当用户想要一个干净的抠图时,排除场景、地面、底座、反射和阴影。
不要仅基于预览背景就声称模型缺乏透明度。在需要验证时,请检查下载的原始 PNG 的 Alpha 通道;图像查看器可能会将透明像素显示为白色或棋盘格。
当用户提供本地图像路径时,直接将该路径字符串传递给 --image-file。不要使用 Read、附加图像、检查它或在代理中对其进行编码。子脚本会在其自身进程中读取文件并进行 base64 编码,上传到固定的 NoneLinear 上传端点,并仅将返回的 URL 传递给图像 API。Base64 字节永远不会进入标准输出或模型上下文。
脚本调用
使用默认设置进行文本生成图像:
node "<skill-directory>/scripts/generate-image.mjs" \
--prompt "白色陶瓷马克杯放在胡桃木桌面上,清晨自然光,真实摄影风格"
仅在用户要求或所选模型需要时指定支持的选项:
node "<skill-directory>/scripts/generate-image.mjs" \
--model "gemini-2.5-flash-image" \
--prompt "未来城市天际线,电影感广角摄影,日落自然光" \
--aspect-ratio "16:9" \
--response-format "url"
编辑一张图像:
node "<skill-directory>/scripts/generate-image.mjs" \
--operation "edit" \
--image "https://example.com/source.png" \
--prompt "把背景替换为浅灰色摄影棚,保留主体不变" \
--aspect-ratio "1:1"
编辑本地图像,无需将其加载到代理上下文中:
node "<skill-directory>/scripts/generate-image.mjs" \
--operation "edit" \
--image-file "/absolute/path/to/source.png" \
--prompt "把背景替换为浅灰色摄影棚,保留主体不变"
通过重复 --image 并按预期的参考顺序融合多张图像:
node "<skill-directory>/scripts/generate-image.mjs" \
--operation "fuse" \
--image "https://example.com/product.png" \
--image "https://example.com/scene.png" \
--prompt "把图一的产品自然放入图二的场景,保持产品外观"
本地文件和 URL 可以混合使用。请保持它们在命令行中的顺序:
node "<skill-directory>/scripts/generate-image.mjs" \
--operation "fuse" \
--image-file "/absolute/path/to/product.png" \
--image "https://example.com/scene.png" \
--prompt "把图一的产品自然放入图二的场景,保持产品外观"
将 quality 和 size 与 gpt-image-2 一起使用:
node "<skill-directory>/scripts/generate-image.mjs" \
--model "gpt-image-2" \
--prompt "白色陶瓷马克杯产品图,浅灰摄影棚背景" \
--size "2048x1152" \
--quality "high"
使用 gpt-image-2 生成透明 PNG:
node "<skill-directory>/scripts/generate-image.mjs" \
--model "gpt-image-2" \
--prompt "一瓶高端植物精华液概念瓶,主体完整,透明背景,不要场景、地面、底座、投影和倒影" \
--size "1024x1024" \
--background "transparent" \
--output-format "png"
使用 Seedream 5 Pro 进行文本生成图像:
node "<skill-directory>/scripts/generate-image.mjs" \
--model "doubao-seedream-5-0-pro-260628" \
--prompt "透明玻璃茶壶放在胡桃木桌面上,1:1 构图,真实产品摄影" \
--size "1K" \
--output-format "png" \
--watermark "false" \
--optimize-prompt-mode "standard"
支持的脚本参数:
--prompt <text>:必需。--operation <generate|edit|fuse>:可选;省略时根据参考图像数量推断。--image <public-https-url>:为每个参考图像重复使用;保持用户的顺序。--image-file <local-path>:为本地引用重复使用;可以按顺序与--image混合使用。--model <id>:可选;默认为gemini-2.5-flash-image。--aspect-ratio <ratio>:可选;例如1:1或16:9。--size <size>:可选;仅用于有文档说明支持此参数的模型。--quality <low|medium|high|auto>:可选,且仅对gpt-image-2有效;此技能默认设置为low。--api-key <key>:当用户直接向宿主代理提供密钥时,用于当前调用的可选凭据。如果可用,优先使用环境凭据。--n <count>:可选整数,1 到 10;如果模型不支持,则省略。--response-format <url>:可选兼容性参数;仅接受url。--output-format <png|jpeg|webp>:特定于模型;使用前请阅读能力注册表。--background <auto|opaque|transparent>:仅用于gpt-image-2生成。--watermark <true|false>:仅用于 Seedream 5 Pro。--optimize-prompt-mode <standard|fast>:仅用于 Seedream 5 Pro。
通过聊天或命令传递 API 密钥可能会暴露给对话历史、进程列表或工具日志。警告用户此风险,但不要仅仅因为用户直接将密钥提供给了宿主代理就拒绝请求。仅在当前调用中使用 --api-key;除非用户明确要求宿主配置它,否则不要回显、包含在最终响应中或持久化它。不要通过 curl 或临时脚本构建请求;捆绑的脚本会强制执行端点和输出安全。
对于默认模型,最多使用三个参考图像。直接将每个 URL 或本地路径字符串传递给脚本。在调用脚本之前,不要使用 Read、WebFetch、curl、浏览器工具或其他命令来获取、检查、下载图像或对其进行 base64 编码。
上下文安全
将图像字节保留在代理上下文之外:
- 切勿将此工作流的本地图像字节附加到工具调用中。
- 切勿将 base64、数据 URL 或二进制图像内容放入提示词、命令、标准输出或回复中。
- 通过
--image-file将本地引用作为路径字符串传递;子进程处理上传。 - Base64 仅短暂存在于子进程内部和上传 HTTP 主体中。它永远不会被打印、返回、记录或通过代理传回。
- 如果用户已经向对话附加了图像,请解释宿主可能已经在此技能运行前将此图像计入上下文;此技能无法将其移除。
- 如果 API 意外只返回
b64_json,则报告base64_output_blocked。不要打印该载荷或自动重试。
对于 gpt-image-2,使用 size,而不是 aspect_ratio。更高的 quality 通常会增加延迟、输出令牌和成本。在选择自定义分辨率前,请阅读 references/models.md 了解完整的尺寸限制。
此技能目前仅对文本生成图像功能开放透明背景。
对于 doubao-seedream-5-0-pro-260628,使用 size,切勿使用 aspect_ratio 或 n。它支持文本生成图像、单图像编辑以及最多十个参考图像的融合。请保留提示词中的 <point> 和 <bbox> 标签。不要尝试分组输出或传递 sequential_image_generation;此模型不支持。其请求超时时间为 600 秒。
凭据
脚本按以下顺序接受凭据:
--api-key,当用户直接为当前请求向宿主代理提供密钥时NONELINEAR_API_KEYNonelinear_API_KEYOPENAI_API_KEY,仅当OPENAI_BASE_URL是一个 HTTPS URL 且其确切主机名为api.nonelinear.com时ANTHROPIC_AUTH_TOKEN或ANTHROPIC_API_KEY,仅当ANTHROPIC_BASE_URL是一个 HTTPS URL 且其确切主机名为api.nonelinear.com时
不要读取 .env、cc-switch 数据库或 Claude/Codex 配置文件。这些工具可能会将凭据注入到代理进程环境中。如果脚本返回 missing_api_key,请提供两种选择:配置环境变量,或者在进行解释(聊天和工具日志可能会保留它)后为当前调用提供密钥。
请求的目标地址固定为 https://nonelinear.com/api/upload-file(用于本地输入)和 https://api.nonelinear.com/v1/images/generations(用于图像生成)。环境变量无法重定向它们。
结果处理
成功时的结果格式如下:
{
"status": "completed",
"operation": "edit",
"model": "gemini-2.5-flash-image",
"images": [{ "url": "https://example.com/image.png" }],
"request_id": "request-id-or-null"
}
失败时的结果格式如下:
{
"status": "failed",
"error": "人类可读的消息",
"code": "stable_error_code"
}
Gemini 可能返回 HTTP 成功,但包含 data: []、仅文本、IMAGE_RECITATION 或 NO_IMAGE。除非某个项目包含非空的 url,否则将所有此类响应视为失败。阻止仅 base64 的响应而不是将其输出。
对于 no_image_output,解释提供商未返回图像,并建议修改提示词。不要自动重试,因为每次请求都可能产生费用。对于 missing_api_key,提供环境设置指导。对于所有其他失败,仅报告 error 和 code;切勿显示请求头、授权值、完整请求对象或凭据值。
不要将此技能用于视频生成、模型列表、通用文件上传或下载输出文件。本地图像上传仅作为编辑和融合请求的内部预处理步骤。