Communitygithub.com

Fitnessnlp/nonelinear-skills

NoneLinear 官方 AI 代理技能,用於圖片生成、編輯與多圖融合

nonelinear-skills 是什麼?

此技能提供一個整合的 Node.js 腳本,讓 AI 代理(如 Claude Code、Cursor、Codex)能執行 NoneLinear 系列的圖片生成、編輯與融合操作。它支援多種主流模型(如 Gemini 2.5 Flash Image、GPT-Image-2、Seedream 5 Pro),並可精確控制長寬比、尺寸、品質、背景透明度與浮水印等參數。技能的設計著重於代理上下文安全,所有本地圖片路徑均透過 --image-file 參數傳遞,由子進程獨立處理上傳與 Base64 編碼,確保圖片二進位資料不進入代理的提示或輸出之中。支援透明背景輸出、圖片編輯與最多十張圖片的融合,並提供完整的認證機制與錯誤處理流程。

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

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

NoneLinear Image

透過執行附帶的無依賴 Node.js 腳本來生成或轉換圖片。請勿呼叫 nonelinear 或 nl CLI,也請勿為主機代理的內建圖片生成器處理 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 "把图一的产品自然放入图二的场景,保持产品外观"

搭配 gpt-image-2 使用 quality 與 size:

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、data URL 或二進位圖片內容放入提示詞、命令、標準輸出或回覆中。
  • 透過 --image-file 將本地參考以路徑字串傳遞;子程序會處理上傳。
  • Base64 僅短暫存在於子程序內部以及上傳 HTTP 請求體中。它永遠不會被列印、回傳、記錄或透過代理傳遞回來。
  • 如果使用者已將圖片附加到對話中,請說明主機可能已在此技能執行前將該圖片計入上下文;此技能無法將其移除。
  • 如果 API 意外僅回傳 b64_json,請回報 base64_output_blocked。請勿列印該負載或自動重試。

對於 gpt-image-2,請使用 size,而非 aspect_ratio。較高的 quality 通常會增加延遲、輸出 token 與成本。在選擇自訂解析度之前,請閱讀 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": "Human readable message",
  "code": "stable_error_code"
}

Gemini 可能回傳 HTTP 成功但帶有 data: []、純文字、IMAGE_RECITATION 或 NO_IMAGE。除非某個項目包含非空的 url,否則將所有此類回應視為失敗。請封鎖僅回傳 Base64 的回應,而不是將其輸出。 對於 no_image_output,請說明提供者未回傳圖片,並建議修改提示詞。請勿自動重試,因為每個請求都可能產生費用。對於 missing_api_key,請提供環境設定指引。對於所有其他失敗,僅回報 error 與 code;永遠不要顯示請求標頭、Authorization 值、完整的請求物件或憑證值。

請勿將此技能用於影片生成、模型列表、通用檔案上傳或下載輸出檔案。本地圖片上傳僅是編輯與融合請求的內部預處理步驟。

相關技能