XinYu.
导航
开发者
MCPCLI
语言
CLI

XinYu AI 命令行工具

在终端或 CI 里生成图像、视频、音频和文本,也能整理画布,用的是你自己的账户和额度。一个二进制 xinyu,还内置了 MCP server(xinyu mcp)。

概述

xinyu CLI 是 XinYu AI 生成接口的轻量封装,用用户级 API Key 鉴权,计费与网页端完全一致。适合脚本、自动化和 CI 流水线。

管道友好

--json 输出走 stdout,进度走 stderr,可直接 | jq。

异步不丢

生成在平台异步跑,等待超时也能用 job wait / job get 取回。

内置 MCP

xinyu mcp 直接作为 MCP server 给 Agent 使用。

前置要求:Node.js 18 或更高版本,以及一个 XinYu AI 账户。

获取 API Key

1

登录 XinYu AI

访问 xinyuai.app 并登录你的账户。
2

打开「个人设置」→「开发者 API 密钥」

点击右上角头像,选择「个人设置」,在页面下方找到「开发者 API 密钥」。
3

创建并复制密钥

输入密钥名称,点击「创建密钥」。明文密钥(xys_live_...)只显示一次,请立即复制保存。只想让脚本查询、不让它花心点?创建前先勾选「只读密钥(只能查询,不能生成)」。
API Key 等同于你的账户权限,可消耗心点。不要提交到代码仓库或公开分享;若泄露,请立即在同一位置吊销。

安装

bash
# Install the `xinyu` command globally
npm install -g @xinyuai/cli

# …or run any command without installing:
npx @xinyuai/cli <command>
需要 Node.js 18 及以上版本。装完后 xinyu 命令即可全局使用。

登录

登录会向服务器校验密钥,并把凭证保存到 ~/.xinyu/credential.json(权限 600)。

bash
# Pass --key directly, or omit it to be prompted
xinyu login --key xys_live_xxxxxxxxxxxx --base-url https://xinyuai.app

也可以不登录,直接用环境变量 XINYU_API_KEY / XINYU_BASE_URL(优先级更高,适合 CI)。

命令

账户与模型

xinyu login保存并校验 API Key
xinyu logout移除本地凭证
xinyu whoami查看当前登录目标
xinyu balance查询心点余额
xinyu model list列出可用模型(可按类型过滤)
xinyu price生成前估价(仅图像),与服务器计费用同一个函数

项目与素材

xinyu project list列出我的项目(画布),拿到 --project 用的 id
xinyu project create新建一个空画布并返回 id
xinyu project assets搜索 / 列出画布里已有的素材,拿到可复用的 URL(-q 按标题与完整提示词搜索)
xinyu project read画布概览:节点 / 连线总数与各类型的计数
xinyu project arrange整理画布:把散落的内容节点按网格排好
xinyu upload上传本地图片 / 视频 / 音频,打印可用于生成的 URL(--place 同时放到画布)

生成与编辑

xinyu generate image文生图 / 图生图
xinyu generate video文生视频 / 图生视频 / 参考生视频
xinyu generate final把 Seedance 2.5 样片渲染成 1080p 正片
xinyu generate audio文字转语音 / Seed Audio
xinyu generate text文本 LLM 对话
xinyu generate enhance图像高清放大与增强(Topaz)
xinyu generate rembg抠图 / 去背景(透明 PNG)
xinyu generate outpaint图像外绘:向任意一边按像素外扩
xinyu generate image-edit指令式图像编辑(重绘或擦除)
xinyu generate video-edit指令式视频编辑(Kling O3,源视频高度至少 720px)
xinyu generate video-action放大或延长此前生成的 Grok 视频

画布节点

xinyu node rename修改画布节点的标题
xinyu node connect给两个节点连上参考线
xinyu node disconnect移除节点间的参考线
xinyu node delete删除节点及其连线(不可恢复;已出结果或生成中的节点需加 --confirm-*)
xinyu node set-params就地修改节点的生成参数(只存草稿,不重新生成、不花心点)

任务与 MCP

xinyu job get查询单个任务状态与产物
xinyu job wait一直等到任务结束(等待超时后找回结果的首选)
xinyu job list列出最近任务(可按状态 / 画布过滤)
xinyu mcp内置 stdio MCP server

常用参数

bash
xinyu login [--key <key>] [--base-url <url>]
xinyu logout
xinyu whoami
xinyu balance [--json]
xinyu model list [--type IMAGE|VIDEO|AUDIO] [--json]
xinyu price --model <m> [--size <s>] [--count <n>] [--refs <n>] [--json]

xinyu project list    [--search <text>] [--limit <n>] [--json]
xinyu project create  --name <name> [--description <text>] [--json]
xinyu project assets  <projectId> [-q <text>] [--type IMAGE|VIDEO|AUDIO]
                      [--page <n>] [--limit <n>] [--json]
xinyu project read    <projectId> [--limit <n>] [--json]
xinyu project arrange <projectId> [--columns <n>] [--gap <n>] [--json]
xinyu upload <file> [--project <id>] [--place] [--json]

xinyu generate image --prompt <p> --project <id> [--model <m>] [--aspect <r>]
                     [--size <s>] [--ref <url...>] [--count <n>] [--x <n>] [--y <n>]
                     [--no-place-on-canvas] [--no-wait] [--timeout <s>] [--json]
xinyu generate video --prompt <p> --project <id> [--model <m>] [--duration <s>]
                     [--resolution <r>] [--audio] [--start-image <url>] [--end-image <url>]
                     [--element-image <url...>] [--ref-video <url...>] [--ref-audio <url...>]
                     [--draft] [--x <n>] [--y <n>] [--no-place-on-canvas]
                     [--no-wait] [--timeout <s>] [--json]
xinyu generate final <draftJobId> --project <id> [--resolution <r>]
                     [--no-wait] [--timeout <s>] [--json]
xinyu generate audio --text <t> --project <id> [--model <m>] [--voice <v>] [--no-wait] [--json]
xinyu generate text  --prompt <p> [--model <m>] [--media <url...>] [--project <id>] [--json]

xinyu generate enhance      --image <url> --project <id> [--upscale-factor <n>]
                            [--no-face-enhancement]
xinyu generate rembg        --image <url> --project <id> [--mask]
xinyu generate outpaint     --image <url> --project <id> [--top <n>] [--right <n>]
                            [--bottom <n>] [--left <n>]
xinyu generate image-edit   --prompt <t> --image <url> --project <id> [--model <m>] [--mode <m>]
xinyu generate video-edit   --prompt <t> --video <url> --project <id>
                            [--duration <s>] [--keep-audio]
xinyu generate video-action --action <a> --source-task-id <id> --project <id>
                            [--extend-times <n>]

xinyu node rename <nodeId> --project <id> --title <title>
xinyu node connect <sourceId> <targetId> --project <id>
xinyu node disconnect <sourceId> <targetId> --project <id>
xinyu node delete <nodeId...> --project <id> [--confirm-finished] [--confirm-running]
xinyu node set-params <nodeId> --project <id> --set <key=value...>

xinyu job get  <jobId> [--json]
xinyu job wait <jobId> [--timeout <s>] [--json]
xinyu job list [--status <s>] [--project <id>] [--limit <n>] [--json]

xinyu mcp

# --project is required for every generate command except `generate text`:
# every result belongs to a canvas. Get an id with `xinyu project list`
# or `xinyu project create`. Run `xinyu <command> --help` for every flag.
# Valid values for --size / --duration / --resolution depend on the model:
# see `xinyu model list --json`.

示例

bash
# Create (or pick) a canvas first — every generation needs one
PID=$(xinyu project create --name "My Canvas" --json | jq -r '.id')

# Ask what an image would cost before spending anything
xinyu price --model nano-banana-2 --size 2K --count 2

# Grab a generated image URL in CI (clean JSON on stdout)
URL=$(xinyu generate image --prompt "a beach at sunset" \
        --model nano-banana-2 --size 2K --project "$PID" --json | jq -r '.assets[0]')

# Upload a local image, then animate it as the first frame
IMG=$(xinyu upload ./character.png)
xinyu generate video --prompt "she turns and smiles" --model seedance-2 \
        --start-image "$IMG" --duration 5 --project "$PID"

# Lost the id after a timeout? Find the job, then wait for it
xinyu job list --status RUNNING --project "$PID"
xinyu job wait <jobId>

# Ask an LLM
xinyu generate text --prompt "summarize MCP in one sentence"
生成类命令默认会等待任务完成并把产物 URL 打到 stdout;加 --no-wait 立即返回 jobId,之后用 xinyu job wait 或 xinyu job get 取回。generate 可缩写为 gen,project 可写作 canvas。node 系列(改标题 / 连线 / 删除 / 改参数)目前只支持个人画布,团队画布会被拒绝。

异步与超时(结果绝不丢失)

生成在平台异步运行,和 CLI 是否在等待完全解耦。--timeout 只控制 CLI 在本地等多久:图像、音频类命令默认 300 秒,视频类命令(generate video / final / video-edit / video-action)默认 2400 秒(40 分钟),job wait 默认 600 秒。平台会把约 60 分钟仍没有产出的任务判定失败并退款,所以 --timeout 设到 3600 秒(60 分钟)就足够了。

bash
$ xinyu generate video --prompt "..." --model seedance-2 --project "$PID" --timeout 1200
Job 7f3a… queued (40 Xins) — waiting...
Stopped waiting after 1200s — the job is STILL RUNNING and you have already paid 40 Xins for it.
Do not run the generate command again; resume it instead:
  xinyu job wait 7f3a…          # blocks until it finishes
  xinyu job list --status RUNNING  # if you lost the id

等待超时不会报错:CLI 会打印 jobId 和继续等待的办法后退出,任务仍在服务器继续跑。用 xinyu job wait 继续等,或用 xinyu job get 查一次;忘了 id 就用 xinyu job list --status RUNNING。完成后产物保存到你的账户(指定 --project 则进入对应画布项目)。计费在创建时扣除;任务失败会自动退款,长时间(约 60 分钟以上)没有产出的任务,平台也会自动判定失败并退款——既不会重复扣费,也不会丢成功结果。请不要因为超时而重新运行 generate 命令。

作为 MCP server 使用

xinyu mcp 会用你保存的凭证,作为 stdio MCP server 启动,把 MCP 页列出的全部工具(生成、编辑、任务、画布读写)暴露给任意 MCP 客户端。

json
{
  "mcpServers": {
    "xinyu": {
      "command": "xinyu",
      "args": ["mcp"]
    }
  }
}

完整的 MCP 连接说明见 MCP 指引页。

常见问题