XinYu AI 命令行工具
在终端或 CI 里生成图像、视频、音频和文本,也能整理画布,用的是你自己的账户和额度。一个二进制 xinyu,还内置了 MCP server(xinyu mcp)。
概述
xinyu CLI 是 XinYu AI 生成接口的轻量封装,用用户级 API Key 鉴权,计费与网页端完全一致。适合脚本、自动化和 CI 流水线。
--json 输出走 stdout,进度走 stderr,可直接 | jq。
生成在平台异步跑,等待超时也能用 job wait / job get 取回。
xinyu mcp 直接作为 MCP server 给 Agent 使用。
获取 API Key
登录 XinYu AI
打开「个人设置」→「开发者 API 密钥」
创建并复制密钥
安装
# Install the `xinyu` command globally
npm install -g @xinyuai/cli
# …or run any command without installing:
npx @xinyuai/cli <command>登录
登录会向服务器校验密钥,并把凭证保存到 ~/.xinyu/credential.json(权限 600)。
# 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 Keyxinyu logout移除本地凭证xinyu whoami查看当前登录目标xinyu balance查询心点余额xinyu model list列出可用模型(可按类型过滤)xinyu price生成前估价(仅图像),与服务器计费用同一个函数项目与素材
xinyu project list列出我的项目(画布),拿到 --project 用的 idxinyu project create新建一个空画布并返回 idxinyu 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 Audioxinyu 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常用参数
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`.示例
# 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"异步与超时(结果绝不丢失)
生成在平台异步运行,和 CLI 是否在等待完全解耦。--timeout 只控制 CLI 在本地等多久:图像、音频类命令默认 300 秒,视频类命令(generate video / final / video-edit / video-action)默认 2400 秒(40 分钟),job wait 默认 600 秒。平台会把约 60 分钟仍没有产出的任务判定失败并退款,所以 --timeout 设到 3600 秒(60 分钟)就足够了。
$ 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 客户端。
{
"mcpServers": {
"xinyu": {
"command": "xinyu",
"args": ["mcp"]
}
}
}完整的 MCP 连接说明见 MCP 指引页。