mcpField
S
sn-image-base

sn-image-base

github.com/opensensenova创意与媒体6.0k185 次安装2 天前更新
代码仓库

关于 sn-image-base

这是 SenseNova-Skills 的基础层技能,提供图像生成、编辑、识别和文本优化命令行工具。它直接调用后端服务,不对输入进行预处理。

主要功能

  1. 01根据提示词生成图像
  2. 02编辑一张或多张参考图像
  3. 03使用 VLM 分析多张图像
  4. 04使用 LLM 优化文本
  5. 05通过命令行或环境变量配置服务
  6. 06以文本或 JSON 返回结果

适用场景

  1. 01根据文本提示生成图像
  2. 02使用参考图像编辑图像
  3. 03通过视觉模型分析图像内容
  4. 04使用 LLM 优化文本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/opensensenova/sensenova-skills --skill sn-image-base

安装后在 Claude Code 中输入/sn-image-base确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.gitattributes
.gitignore
README_CN.md
README.md
requirements.txt
references/
api_spec.md
scripts/
.python-version
extract_json.py
pyproject.toml
ruff.toml
sn_agent_runner.py
scripts/sn_image_base/
__init__.py
configs.py
exceptions.py
scripts/sn_image_base/generation/
__init__.py
nano_banana.py
openai_image.py
sensenova.py
scripts/sn_image_base/generation/core/
__init__.py
client_base.py
scripts/sn_image_base/llm/
__init__.py
anthropic_adapter.py
chat_completions_adapter.py
llm_adapter.py
scripts/sn_image_base/utils/
__init__.py
error_utils.py
httpx_client.py
scripts/sn_image_base/vlm/
__init__.py
utils.py
vlm_adapter.py

详细介绍

sn-image-base

依赖安装

pip install -r requirements.txt

概述

sn-image-base 是 SenseNova-Skills 项目的基础层技能(第 0 层),提供四种底层工具:

  • sn-image-generate:图像生成(调用 text-to-image-no-enhance API)
  • sn-image-edit:使用 SenseNova U1.5 Lite 编辑图像(调用 /images/edits)
  • sn-image-recognize:图像识别(使用 VLM 分析图像内容)
  • sn-text-optimize:文本优化(使用 LLM 处理文本)

此技能不会执行任何输入预处理,只调用后端服务并返回结果。

工具列表

sn-image-generate

调用 text-to-image-no-enhance API 的图像生成工具。

--prompt 为必填项;其他参数均为可选项:

参数类型默认值描述
--promptstring必填图像生成提示词
--negative-promptstring""负向提示词
--image-sizestring2k图像尺寸预设(不区分大小写)。建议使用 2k。sensenova-u1.5-lite 支持 4k;其他 SenseNova 图像模型可能会拒绝该值。其他值 → status=failed。
--aspect-ratiostring16:9宽高比,例如 1:1、16:9、9:16
--seedintNone用于实现可复现生成的随机种子
--unet-namestringNone指定 UNet 模型名称
--api-keystringSN_IMAGE_GEN_API_KEY -> SN_API_KEYAPI 密钥(CLI 参数优先;如果均为空,则引发 MissingApiKeyError)
--base-urlstringSN_IMAGE_GEN_BASE_URL -> SN_BASE_URLAPI 基础 URL(CLI 参数优先)
--poll-intervalfloat5.0轮询间隔(秒)
--timeoutfloat300.0超时时间(秒)
--insecureflagFalse禁用 TLS 验证
--save-pathPath自动生成保存路径

SenseNova 图像请求默认会显式发送 watermark=false。支持 sensenova-u1-fast 和 sensenova-u1.5-lite;U1.5 Lite 还支持原生 4K 输出。目前,无水印功能处于免费公开测试阶段,之后可能会改为付费功能。

sn-image-edit

通过 /images/edits 端点使用 SenseNova U1.5 Lite 编辑一张或多张参考图像。本地路径会转换为 Data URL;HTTP(S) URL 和 Data URL 会直接传递。

python scripts/sn_agent_runner.py sn-image-edit \
    --prompt "Change the background to a snowy mountain" \
    --images source.png reference.png \
    --save-path edited.png

编辑请求使用官方默认值:n=1、size=auto、watermark=false、prompt_extend=true 和 response_format=url。

sn-image-recognize

使用 VLM(视觉语言模型)分析图像内容的图像识别工具。支持输入多张图像。

--images 和 --user-prompt(或 --user-prompt-path)为必填项。其他参数均采用三级默认值(CLI > 环境变量 > 内置默认值):

参数类型内置默认值环境变量描述
--api-keystring无硬编码默认值SN_VISION_API_KEY -> SN_CHAT_API_KEY -> SN_API_KEY聊天运行时 API 密钥;如果均未设置,则引发 MissingApiKeyError
--base-urlstringSN_CHAT_BASE_URL 默认值SN_VISION_BASE_URL -> SN_CHAT_BASE_URL -> SN_BASE_URL视觉服务提供方的基础 URL;未设置时回退到共享聊天/全局服务提供方
--modelstringsensenova-6.8-flash-liteSN_VISION_MODEL -> SN_CHAT_MODEL支持视觉功能的模型名称
--vlm-typestringopenai-completionsSN_VISION_TYPE -> SN_CHAT_TYPE聊天协议类型覆盖值
--user-prompt-pathstringNone-本地文件路径,与 --user-prompt 互斥
--system-prompt-pathstringNone-本地文件路径,与 --system-prompt 互斥

--vlm-type 的可用值:

  • openai-completions:兼容 OpenAI 的 /v1/chat/completions 接口
  • anthropic-messages:Anthropic Messages /v1/messages 接口
sn-text-optimize

用于优化文本内容的文本优化工具,使用 LLM(语言模型)。不接受图像输入。

必须提供 --user-prompt(或 --user-prompt-path)。所有其他参数采用三级默认值(CLI > 环境变量 > 内置默认值):

参数类型内置默认值环境变量说明
--api-key字符串无硬编码默认值SN_TEXT_API_KEY -> SN_CHAT_API_KEY -> SN_API_KEY聊天运行时 API 密钥;若均未设置,则引发 MissingApiKeyError
--base-url字符串SN_CHAT_BASE_URL 默认值SN_TEXT_BASE_URL -> SN_CHAT_BASE_URL -> SN_BASE_URL文本提供方基础 URL;回退到共享聊天/全局提供方
--model字符串sensenova-6.8-flash-liteSN_TEXT_MODEL -> SN_CHAT_MODEL文本模型名称
--llm-type字符串openai-completionsSN_TEXT_TYPE -> SN_CHAT_TYPE聊天协议类型覆盖值
--user-prompt-path字符串None-本地文件路径,与 --user-prompt 互斥
--system-prompt-path字符串None-本地文件路径,与 --system-prompt 互斥

--llm-type 的可用值:

  • openai-completions:兼容 OpenAI 的 /v1/chat/completions 接口
  • anthropic-messages:Anthropic Messages /v1/messages 接口

VLM 与 LLM

工具模型类型图像输入接口类型参数
sn-image-recognizeVLM(视觉语言模型)是,支持多张图像--vlm-type
sn-text-optimizeLLM(语言模型)否,仅支持文本--llm-type

用法

所有工具均通过统一的 sn_agent_runner.py 入口点调用:

# Image generation (only prompt required; api-key/base-url have defaults)
python scripts/sn_agent_runner.py sn-image-generate \
    --prompt "..."

# Image generation (override base-url)
python scripts/sn_agent_runner.py sn-image-generate \
    --prompt "..." \
    --base-url "https://custom-endpoint.com/v1"

# Image generation (explicitly override api-key)
python scripts/sn_agent_runner.py sn-image-generate \
    --prompt "..." \
    --api-key "sk-xxx"

# Image recognition (VLM) - minimal call (uses built-in Sensenova defaults)
python scripts/sn_agent_runner.py sn-image-recognize \
    --user-prompt "Describe the image" \
    --images "path/to/image.png"

# Image recognition (VLM) - override to Anthropic Claude API compatible (messages interface)
python scripts/sn_agent_runner.py sn-image-recognize \
    --user-prompt "Describe the image" \
    --images "path/to/image.png" \
    --api-key "sk-ant-xxx" \
    --base-url "https://api.anthropic.com" \
    --model "claude-sonnet-4-6" \
    --vlm-type "anthropic-messages"

# Text optimization (LLM) - minimal call (uses built-in Sensenova defaults)
python scripts/sn_agent_runner.py sn-text-optimize \
    --user-prompt "Optimize the text: ..."

# Text optimization (LLM) - override to Anthropic Claude API compatible (messages interface)
python scripts/sn_agent_runner.py sn-text-optimize \
    --user-prompt "Optimize the text: ..." \
    --api-key "sk-ant-xxx" \
    --base-url "https://api.anthropic.com" \
    --model "claude-sonnet-4-6" \
    --llm-type "anthropic-messages"
默认参数行为

sn-image-generate 的身份验证参数具有以下默认行为:

参数默认值覆盖方式说明
--base-urlSN_IMAGE_GEN_BASE_URL -> SN_BASE_URL--base-url "..."CLI 参数优先
--api-keySN_IMAGE_GEN_API_KEY -> SN_API_KEY--api-key "..."CLI 参数优先;若所有值均为空,则引发 MissingApiKeyError

sn-image-recognize 和 sn-text-optimize 的优先级为:CLI 参数 > 工具专用环境变量 > 共享 SN_CHAT_* 环境变量 > 全局 SN_* 环境变量 > 内置默认值。

参数内置默认值视觉环境变量文本环境变量
--api-key无(必须提供)SN_VISION_API_KEY -> SN_CHAT_API_KEY -> SN_API_KEYSN_TEXT_API_KEY -> SN_CHAT_API_KEY -> SN_API_KEY
--base-urlhttps://token.sensenova.cn/v1SN_VISION_BASE_URL -> SN_CHAT_BASE_URL -> SN_BASE_URLSN_TEXT_BASE_URL -> SN_CHAT_BASE_URL -> SN_BASE_URL
--modelsensenova-6.8-flash-liteSN_VISION_MODEL -> SN_CHAT_MODELSN_TEXT_MODEL -> SN_CHAT_MODEL
--vlm-type / --llm-typeopenai-completionsSN_VISION_TYPE -> SN_CHAT_TYPESN_TEXT_TYPE -> SN_CHAT_TYPE

api_key 的解析顺序(从高到低):CLI --api-key > 工具专用密钥(SN_VISION_API_KEY/SN_TEXT_API_KEY)> SN_CHAT_API_KEY > SN_API_KEY。若均未设置,则引发 MissingApiKeyError。

只有 --api-key 必须通过 CLI 或环境变量提供;基础 URL、模型和接口类型均有共享的聊天默认值。

Agent 配置集成

Agent 可自动从 openclaw.json 读取参数,无需手动输入:

CLI 参数openclaw.json 字段示例
--base-urlproviders.<name>.baseUrlhttps://api.anthropic.com
--llm-typeproviders.<name>.apianthropic-messages / openai-completions
--vlm-typeproviders.<name>.apianthropic-messages / openai-completions
--modelproviders.<name>.models[].idclaude-sonnet-4-6
--api-keyproviders.<name>.apiKey 或环境变量sk-cp-...

注意:--llm-type 和 --vlm-type 共用同一个 providers.<name>.api 字段,分别供 LLM 和 VLM 工具使用。

provider.api 与接口类型的映射关系:

api 值对应的 --llm-type / --vlm-type端点路径
anthropic-messagesanthropic-messages/v1/messages
openai-completionsopenai-completions/v1/chat/completions
openai-responses(未来扩展)/responses

base-url 与接口类型的映射关系

不同的 API 类型对 base-url 格式有不同要求:

类型--llm-type / --vlm-type推荐的 base-url代码追加的路径最终 URL 示例
LLMopenai-completionshttps://token.sensenova.cn/v1/chat/completionshttps://token.sensenova.cn/v1/chat/completions
LLManthropic-messageshttps://api.anthropic.com/v1/messageshttps://api.anthropic.com/v1/messages
VLMopenai-completionshttps://token.sensenova.cn/v1/chat/completionshttps://token.sensenova.cn/v1/chat/completions
VLManthropic-messageshttps://api.anthropic.com/v1/messageshttps://api.anthropic.com/v1/messages

注意:

  • 推荐的聊天 base URL 应包含提供商 API 版本路径,例如 /v1。
  • 为兼容起见,如果配置的聊天 base URL 不含路径,运行器会追加 /v1/chat/completions 或 /v1/messages。
  • 如果配置的聊天 base URL 已包含 /v1 等路径,运行器只会追加 /chat/completions 或 /messages。
  • 有些提供商使用 /v1 以外的版本化路径,例如 Gemini 的 /v1beta/openai。

输出格式

所有工具都支持两种输出格式:

  • --output-format text(默认):输出纯文本结果
  • --output-format json:输出 JSON,其中包含 status 和 elapsed_seconds(运行时间,单位为秒,四舍五入到小数点后 2 位)

sn-image-recognize 和 sn-text-optimize 的 JSON 输出还包含 model、base_url 和 interface_type,用于验证实际生效的运行时配置:

{
  "status": "ok",
  "result": "...",
  "model": "sensenova-6.8-flash-lite",
  "base_url": "https://token.sensenova.cn/v1",
  "interface_type": "openai-completions",
  "elapsed_seconds": 1.23
}

失败时:

{
  "status": "failed",
  "error": "error message",
  "elapsed_seconds": 0.05
}

输入/输出规范

详情请参阅 references/api_spec.md。

评论

支持 Markdown