Communitygithub.com

Fitnessnlp/nonelinear-skills

NoneLinear 官方的 AI Agent 技能,用于图像生成、编辑和多图融合。

nonelinear-skills 是什么?

这是一个官方开发的 NoneLinear Agent 技能,旨在为 Claude Code 等 AI 编码代理提供强大且安全的图像生成、编辑与融合能力。它通过一个自包含的 Node.js 脚本 (`generate-image.mjs`) 与 NoneLinear 的 API 进行交互,支持多种主流模型,如 `gemini-2.5-flash-image`、`gpt-image-2` 和 `doubao-seedream-5-0-pro-260628`。该技能的核心优势在于其严格的安全设计,确保所有图像数据(尤其是来自本地文件的图像)在子进程中进行 base64 编码和上传,从而完全避免将图像字节注入到代理的上下文窗口中,保护了用户隐私和会话的整洁。此外,该技能还提供了对透明背景生成、多图融合、模型特定参数以及 API 密钥管理的清晰指引,并内置了丰富的错误处理逻辑,如检测 `base64_output_blocked` 和 `no_image_output` 等情况,避免产生不必要的大额 API 费用或暴露敏感信息。

兼容平台✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add Fitnessnlp/nonelinear-skills

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

NoneLinear Image

通过运行捆绑好的无依赖 Node.js 脚本来生成或转换图像。请勿直接调用 nonelinear 或 nl 命令行工具,也不要为了处理 NoneLinear 请求而使用宿主代理的内置图像生成器。

工作流程

  1. 将用户要求生成或转换图像的明确请求视为进行一次可计费的 API 调用的授权。当用户仅询问能力或设置时,不要进行 API 调用。
  2. 根据用户意图选择操作:
    • generate:无参考图像。
    • edit:恰好一个本地图片路径或公开的 HTTPS 参考图像 URL。
    • fuse:至少两个本地路径或公开的 HTTPS 参考图像 URL。
  3. 提取提示词以及可选的模型、宽高比、尺寸、质量和数量。如果用户要求透明图像,则应用下方的透明图像预设。对于 gpt-image-2,质量默认设置为 low,除非用户要求其他支持的值。
  4. 将其他请求默认设置为 gemini-2.5-flash-image。始终请求 URL 格式的输出。
  5. 在选择非默认模型或添加模型特定参数之前,请阅读 references/models.md 以及在需要精确限制时阅读 references/model-capabilities.json。切勿发明模型 ID 或不支持的参数。
  6. 定位此 SKILL.md 文件所在目录下的 scripts/generate-image.mjs,并使用 Node.js 18 或更高版本调用它。在 Claude Code 中,${CLAUDE_SKILL_DIR} 是技能目录。在其他宿主中,请使用加载此技能时的绝对目录。
  7. 解析写入标准输出的单个 JSON 对象。仅当 status 为 completed 且 images 包含至少一个 url 字段时才声明成功。
  8. 将图像 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 秒。

凭据

脚本按以下顺序接受凭据:

  1. --api-key,当用户直接为当前请求向宿主代理提供密钥时
  2. NONELINEAR_API_KEY
  3. Nonelinear_API_KEY
  4. OPENAI_API_KEY,仅当 OPENAI_BASE_URL 是一个 HTTPS URL 且其确切主机名为 api.nonelinear.com 时
  5. 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;切勿显示请求头、授权值、完整请求对象或凭据值。

不要将此技能用于视频生成、模型列表、通用文件上传或下载输出文件。本地图像上传仅作为编辑和融合请求的内部预处理步骤。

相关技能