接入信息 下游项目填这两个值
把下面两项填进你的项目就能调用。BASE URL 就是接口地址前缀。
模型名:
muse-spark(对话/代码)、muse-image(生图)、muse-video(生视频)。
完整调用示例见「接入文档」页签。
账号总数
0
可用
0
异常
0
已禁用
0
媒体文件
0
添加账号 支持批量
从浏览器复制 muse.ai 的 Cookie 字符串粘贴进来即可。关键 cookie:
hatch_sess、hatch_gw、hatch_vml。
批量导入时每行一个账号,格式 标签 | cookie串(标签可省略)。
账号列表 0
● 自动保活轮转中 (30m)系统已开启后台每 30 分钟静默保活与多账号公平轮转(LRU);「测试」会真实打开 muse.ai 验证会话。
| 标签 | 账号 ID | 状态 | 有效期 | 额度 | 启用 | Cookie | 最后使用 | 备注 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| 加载中… | |||||||||
方式一:浏览器扩展 推荐 · 零命令行 · 全平台
用一个浏览器小扩展,把你自己电脑上已经登录好的 muse.ai 登录态同步过来。
不用装 Python、不用开终端、不用敲命令。
为什么必须用扩展:muse.ai 的 4 条核心 cookie 都带
为什么必须用扩展:muse.ai 的 4 条核心 cookie 都带
httpOnly 标记,网页脚本(F12 里敲 document.cookie、
小书签)读不到;只有浏览器扩展的 cookies 接口能拿到。
1
下载并解压扩展
解压到一个你不会删掉的目录,比如
⬇ 下载 muse2api-extension.zip
D:\muse2api-extension。
2
在浏览器里加载扩展
以 Chrome 为例(Edge / Brave / 360 极速 等 Chromium 内核浏览器步骤类似):
- 地址栏输入
chrome://extensions回车 - 打开右上角 开发者模式 开关
- 点左上角 加载已解压的扩展程序
- 选中第 1 步解压出来的文件夹(不是里面的单个文件)
3
登录 muse.ai,然后点扩展图标导入
先在你自己的浏览器里打开
https://muse.ai/ 并登录
(登录到能看到聊天界面为止),再点浏览器工具栏上的扩展图标,
把下面两项填进去,点「读取并导入」。
方式二:手动复制 零安装 · 兜底
不想装扩展的话,可以手动把 cookie 串抠出来。关键是用
「网络」面板的请求标头,而不是 Console —— 请求头里的
cookie: 一行包含 httpOnly 的那几条,Console 读不到。
- 在你自己的浏览器里打开并登录
https://muse.ai/,停在聊天界面 - 按 F12 打开开发者工具,切到 网络 / Network 面板
- 按 F5 刷新页面,让请求列表出现内容
- 点列表里任意一条 muse.ai 的请求(第一个就行)
- 右侧找到 标头 / Headers → 往下滚到 请求标头 / Request Headers
- 找到以
cookie:开头的那一行,把冒号后面的整串复制 (从hatch_sess=开始,一直到行尾) - 粘到下面「方式三」的输入框里,点导入
注意:是请求标头里的
cookie:,不是「响应标头」。
响应标头里的 set-cookie 只有部分 cookie,会缺东西。
方式三:粘贴导入 / 本机脚本 进阶
已经拿到 cookie 串的话,直接粘在这里导入(方式二手动复制的串也粘这里)。
如果你习惯命令行、或者想用独立浏览器登录(不碰日常浏览器),也可以用这个脚本。
它只用 Python 标准库,不需要 pip 安装任何东西。
复制正在生成命令…
③ 在弹出的浏览器窗口里登录 muse.ai → 脚本自动抓取并上传 → 自动关窗。
Cookie 有效期说明 实测
实测 muse.ai 各条 cookie 的有效期(不同账号可能略有差异):
| cookie | httpOnly | 实测有效期 | 作用 |
|---|---|---|---|
| hatch_sess | 是 | 约 30 天 | 主会话,决定能不能登录 |
| hatch_gw | 是 | 约 1 年 | 网关令牌 |
| hatch_vml | 是 | 约 2 天 | 短效校验令牌,决定账号寿命 |
| hatch_native_auth_device | 是 | 约 30 天 | 设备标识(匿名访客也有,不是登录凭证) |
账号实际能活多久?取决于最早过期的那条核心 cookie,也就是
注意:这个 2 天不会因为「用得多」而延长。 本服务每次生成完成后确实会把 muse.ai 新下发的 cookie 读回来写进账号池 (所以你会看到「有效期」列的数值有更新),但核心 cookie 的到期时间 不会被推后(已做生成前后对照实验确认)。
所以:大约每 2 天要重新导入一次。好在很快 —— 点一下扩展图标就行。
建议一次多导几个账号:账号池按「最久未用」轮转,多账号既更稳, 也能把重导摊开(每天导一个,而不是所有账号同时失效)。
什么时候要重导?账号列表里「有效期」变成 已过期、状态变成 异常,或出现「缺核心」标记时。
hatch_vml —— 大约 2 天。注意:这个 2 天不会因为「用得多」而延长。 本服务每次生成完成后确实会把 muse.ai 新下发的 cookie 读回来写进账号池 (所以你会看到「有效期」列的数值有更新),但核心 cookie 的到期时间 不会被推后(已做生成前后对照实验确认)。
所以:大约每 2 天要重新导入一次。好在很快 —— 点一下扩展图标就行。
建议一次多导几个账号:账号池按「最久未用」轮转,多账号既更稳, 也能把重导摊开(每天导一个,而不是所有账号同时失效)。
什么时候要重导?账号列表里「有效期」变成 已过期、状态变成 异常,或出现「缺核心」标记时。
生成任务记录 0
生视频是异步任务,状态会从 queued → processing → succeeded / failed。
| 任务 ID | 类型 | 提示词 | 状态 | 耗时 | 创建时间 | 结果 / 错误 | |
|---|---|---|---|---|---|---|---|
| 加载中… | |||||||
媒体库 0
所有已生成并落盘的图片 / 视频,可直接下载或把链接给下游项目使用。
加载中…
在线生图测试 POST /v1/images/generations
真实调用 muse.ai 生成,图片约 10–30 秒返回。
在线生视频测试 POST /v1/videos
异步任务,一般 60–120 秒完成,页面会自动轮询进度。
接入说明
接口与 OpenAI 风格对齐,下游项目只需改
BASE URL:
base_url 和 api_key。
BASE URL:
—
1. 可用模型
| 模型 ID | 用途 | 接口 |
|---|---|---|
| muse-spark | 文本 / 代码对话(支持流式) | POST /v1/chat/completions POST /v1/responses |
| muse-image | 文生图 / 图像编辑 | POST /v1/images/generations |
| muse-video | 文生视频 / 图生视频 | POST /v1/videos → GET /v1/videos/{id} |
这三个就是 Muse 系列的真实能力:Muse Spark(语言 / 代码)、Muse Image(生图)、
Muse Video(生视频)。muse.ai 网页是自动路由的 agent、界面没有模型选择器,
所以
model 字段只用于兼容下游 —— 传 gpt-4o、
claude-sonnet-4、dall-e-3 等常见名字会自动映射到对应能力。
2. 对话 / 写代码
复制# 非流式 curl -X POST "BASE/v1/chat/completions" \ -H "Authorization: Bearer $MUSE2API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"muse-spark","messages":[{"role":"user","content":"写一个 Python 快排"}]}' # 流式:加 "stream":true,返回标准 SSE(data: {...} / data: [DONE])
3. 生图(curl)
复制curl -X POST "BASE/v1/images/generations" \ -H "Authorization: Bearer $MUSE2API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt":"一只戴宇航头盔的柴犬","size":"1:1","response_format":"url"}' # 返回 {"created":1790148495,"data":[{ "revised_prompt":"一只戴宇航头盔的柴犬", "url":"http://your-server:18610/v1/media/xxxx.webp", "kind":"image","bytes":23860}]} # url 是完整绝对地址,可直接给下游渲染 / 下载;/v1/media/* 无需鉴权。 # 想要 base64 就传 "response_format":"b64_json"。
4. 生视频(curl,异步)
复制# ① 创建任务 curl -X POST "BASE/v1/videos" \ -H "Authorization: Bearer $MUSE2API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt":"一只小猫在草地上走动","duration":5,"size":"16:9"}' # → {"id":"task_xxx","status":"queued"} # ② 轮询结果 curl "BASE/v1/videos/task_xxx" -H "Authorization: Bearer $MUSE2API_KEY" # → {"status":"succeeded","result":{"url":"/v1/media/xxx.mp4"}}
5. Python(openai SDK 兼容)
复制from openai import OpenAI import time client = OpenAI(base_url="BASE/v1", api_key="m2a_...") # 生图 r = client.images.generate(model="muse-image", prompt="一只戴宇航头盔的柴犬") print(r.data[0].url) # 生视频(走原生接口,因为是异步任务) import requests t = requests.post("BASE/v1/videos", json={"prompt":"小猫走动","duration":5}, headers={"Authorization":"Bearer m2a_..."}).json() while True: s = requests.get(f"BASE/v1/videos/{t['id']}", headers={"Authorization":"Bearer m2a_..."}).json() if s["status"] in ("succeeded","failed"): break time.sleep(5) print(s)
6. 管理接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /admin/status | 服务总览 + 账号池 + 最近任务 |
| GET | /admin/accounts | 账号列表 |
| POST | /admin/accounts | 添加账号(单条 / batch 批量文本) |
| PATCH | /admin/accounts/{id} | 改标签 / 启用禁用 |
| DELETE | /admin/accounts/{id} | 删除账号 |
| POST | /admin/accounts/{id}/test | 真实校验会话有效性(顺带刷新额度) |
| POST | /admin/accounts/{id}/quota | 实时读取该账号剩余额度 |
| POST | /admin/accounts/{id}/cookies | 更新该账号 cookie |
| GET | /admin/tasks | 任务记录 |
| GET | /admin/media | 媒体库列表 |
7. 鉴权
除
/healthz、/readyz、/v1/media/* 外,其余接口均需
Authorization: Bearer <API Key>。API Key 在服务器
/opt/muse2api/.env 的 MUSE2API_KEY 中配置。
8. 接入各类客户端 / 智能体
凡是支持「自定义 OpenAI 兼容端点」的客户端,都只填三个值就能用:
| 配置项 | 填什么 |
|---|---|
| Base URL / API 地址 | http://<你的服务器IP或域名>:18610/v1 |
| API Key | m2a_...(本页顶部「接入信息」里那个) |
| 模型名 | muse-spark |
模型名随便填也能用:常见名字(
gpt-4o、gpt-5、
claude-sonnet-4、deepseek-chat、gemini-2.5-pro 等)
会自动映射到对应能力;完全没见过的名字会原样透传,muse.ai 那边本来就是自动路由,
不影响结果。
按客户端类型看能不能用
| 客户端类型 | 依赖能力 | 状态 |
|---|---|---|
| 对话 / 聊天类(桌面端、Web UI、浏览器插件) | POST /v1/chat/completions | ✅ 可用 |
| 流式输出(打字机效果) | stream:true(标准 SSE) | ✅ 可用 |
| 代码补全 / 内联补全插件 | POST /v1/chat/completions | ✅ 可用 |
| 翻译 / 总结 / 解释类工具 | POST /v1/chat/completions | ✅ 可用 |
| 画图类客户端 | POST /v1/images/generations | ✅ 可用 |
| 视频生成客户端 | POST /v1/videos(异步轮询) | ✅ 可用 |
| 需要「工具调用」的自主 Agent 模式 | tool_calls / function calling | ⚠️ 不可用 |
关于「工具调用」这条限制(重要,已实测):
muse.ai 的网页助手对「输出伪工具调用 JSON」有明确的对齐拒绝策略 —— 实测原话是 「我不会按这种 JSON 格式输出'伪工具调用'——我没有 get_weather 这个工具」。 用三种不同措辞、不同位置的提示词协议去适配,全部失败。
所以:依赖
客户端若强行带上
muse.ai 的网页助手对「输出伪工具调用 JSON」有明确的对齐拒绝策略 —— 实测原话是 「我不会按这种 JSON 格式输出'伪工具调用'——我没有 get_weather 这个工具」。 用三种不同措辞、不同位置的提示词协议去适配,全部失败。
所以:依赖
tool_calls 的自主 Agent 模式(自动读写文件、执行命令那一类)接不了;
但所有问答式用法 —— 对话、写代码、解释、翻译、总结、生图、生视频 —— 全部完全可用。客户端若强行带上
tools 字段,接口不会报错,会忽略工具声明、按普通对话正常回答。