将 cliProxyAPI 单文件格式与 sub2api 结构化格式进行双向转换的命令行工具。
- 双向转换:cliProxyAPI → sub2api 合并,sub2api → cliProxyAPI 拆分
- 批量处理:支持批量扫描目录中的所有账号文件
- 拖拽支持:Windows 下可直接拖拽文件/文件夹到 bat 脚本执行
- 灵活过滤:支持 include/exclude 通配符模式筛选文件
- 递归扫描:可选递归处理子目录
- 自动命名:根据邮箱、文件名或索引自动生成账户名称
| 格式 | 结构 | 特点 |
|---|---|---|
| cliProxyAPI | 扁平单文件 | 每个账号一个 JSON 文件,所有字段平铺在顶层 |
| sub2api | 结构化多账户 | 单个 JSON 文件包含多个账户,字段分组存储于 credentials 和 extra 中 |
- Python 3.10+
- 无第三方依赖(仅使用标准库)
| 平台 | 脚本类型 | 文件列表 |
|---|---|---|
| Windows | .bat 批处理 |
smart_convert.bat, cpa2sub.bat, sub2cpa.bat |
| macOS | .command 脚本 |
smart_convert.command, cpa2sub.command, sub2cpa.command |
将文件或文件夹拖拽到 smart_convert.bat (Windows) 或 smart_convert.command (macOS) 上,脚本会自动识别格式并转换。
支持同时拖拽多个文件/文件夹进行批量转换!
| 拖入内容 | 检测格式 | 转换方向 | 输出位置 |
|---|---|---|---|
| 文件夹 | cliProxyAPI 多文件 | → sub2api | 文件夹内 sub2api_accounts_import.json |
| sub2api JSON 文件 | 包含 accounts 数组 |
→ cliProxyAPI | 文件同目录 cpa_output/ |
| 单个 cliProxyAPI 文件 | 包含 access_token |
→ sub2api | 文件同目录 sub2api_accounts_import.json |
命令行方式:
# 单个文件/文件夹
python convert_accounts.py auto <文件或文件夹路径>
# 多个文件/文件夹批量处理
python convert_accounts.py auto ./folder1 ./folder2 ./accounts.json
# 指定输出路径(仅单输入时生效)
python convert_accounts.py auto ./accounts -o output.json
# 使用 bat 脚本(支持多文件拖拽)
smart_convert.bat <路径1> [路径2] [路径3] ...多文件拖拽示例:
- 在资源管理器中选中多个文件夹和/或 JSON 文件
- 将它们一起拖拽到
smart_convert.bat图标上 - 脚本会逐一处理每个输入,并在最后显示汇总统计
cpa2sub.bat — 将文件夹拖到 bat 上
- 准备好包含 cliProxyAPI 账号文件(.json)的文件夹
- 将文件夹拖放到
cpa2sub.bat图标上 - 自动在文件夹同级目录生成
sub2api_accounts_import.json
sub2cpa.bat — 将 JSON 文件拖到 bat 上
- 准备好 sub2api 格式的 JSON 文件
- 将文件拖放到
sub2cpa.bat图标上 - 自动在文件同级目录生成
cpa_output文件夹,包含拆分后的单账号文件
将多个 cliProxyAPI 单文件合并转换为 sub2api 格式。
python convert_accounts.py cpa2sub <输入目录> [选项]参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
输入目录 |
包含 cliProxyAPI JSON 文件的目录 | (必填) |
-o, --output |
输出文件路径 | sub2api_accounts.json |
--include |
文件名通配模式,逗号分隔 | *.json |
--exclude |
排除文件名通配模式,逗号分隔 | 无 |
-r, --recursive |
递归扫描子目录 | 否 |
--platform |
平台标识 | openai |
--account-type |
账户类型 | oauth |
--concurrency |
并发数 | 3 |
--priority |
优先级 | 50 |
--name-source |
账户名称来源:email/filename/index |
email |
示例:
# 基本用法
python convert_accounts.py cpa2sub ./accounts
# 指定输出文件
python convert_accounts.py cpa2sub ./accounts -o output.json
# 递归扫描,排除备份文件
python convert_accounts.py cpa2sub ./accounts -r --exclude "*.bak,*_backup*"
# 使用文件名作为账户名称
python convert_accounts.py cpa2sub ./accounts --name-source filename将 sub2api 格式文件拆分为多个 cliProxyAPI 单文件。
python convert_accounts.py sub2cpa <输入文件> [选项]参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
输入文件 |
sub2api 格式的 JSON 文件 | (必填) |
-o, --output-dir |
输出目录 | cpa_accounts |
--name-source |
输出文件名来源:email/name |
email |
示例:
# 基本用法
python convert_accounts.py sub2cpa accounts.json
# 指定输出目录
python convert_accounts.py sub2cpa accounts.json -o ./output
# 使用账户名称作为文件名
python convert_accounts.py sub2cpa accounts.json --name-source name| cliProxyAPI | sub2api | 说明 |
|---|---|---|
access_token |
credentials.access_token |
访问令牌 |
id_token |
credentials.id_token |
ID 令牌 |
refresh_token |
credentials.refresh_token |
刷新令牌 |
account_id |
credentials.chatgpt_account_id |
账户 ID |
email |
credentials.email |
邮箱地址 |
expired |
credentials.expires_at |
过期时间(ISO ↔ Unix 时间戳) |
以下 cliProxyAPI 字段转换时存入 extra 对象:
password, source, type, disabled, mailbox, mail_provider, health_status, backup_written, cpa_sync_status, created_at, last_cpa_sync_at, last_cpa_sync_error, last_probe_at, last_probe_detail, last_probe_result, last_probe_status_code, last_refresh
- apikey 类型跳过:sub2cpa 转换时,仅处理
type=oauth的账户,apikey类型会被跳过 - 时间格式转换:
- cpa2sub:
expired(ISO 8601)→expires_at(Unix 时间戳) - sub2cpa:
expires_at(Unix 时间戳)→expired(ISO 8601)
- cpa2sub:
- 文件名生成规则:
- 邮箱地址中的非法字符(
<>:"/\|?*)会被替换为下划线 - 无邮箱时使用
account_{序号}.json命名
- 邮箱地址中的非法字符(
- cpa2sub 默认值:转换后的账户默认设置
concurrency=3、priority=50、rate_multiplier=1、auto_pause_on_expired=true
macOS 下首次使用需要给脚本添加执行权限:
# 进入脚本目录
cd /path/to/cpa-2-sub2api
# 添加执行权限
chmod +x *.commandmacOS 的 .command 脚本支持与 Windows .bat 文件相同的拖拽操作:
-
smart_convert.command — 智能转换(推荐)
- 将文件或文件夹拖拽到脚本图标上
- 支持同时拖拽多个文件/文件夹进行批量转换
- 自动识别格式并执行相应转换
-
cpa2sub.command — cliProxyAPI → sub2api
- 将包含账号文件的文件夹拖拽到脚本上
- 自动在文件夹同级目录生成
sub2api_accounts_import.json
-
sub2cpa.command — sub2api → cliProxyAPI
- 将 sub2api 格式的 JSON 文件拖拽到脚本上
- 自动在文件同级目录生成
cpa_output文件夹
# 智能转换
./smart_convert.command <路径1> [路径2] [路径3] ...
# cliProxyAPI 转 sub2api
./cpa2sub.command <输入目录> [选项]
# sub2api 转 cliProxyAPI
./sub2cpa.command <输入文件> [选项]- 环境检查:启动时自动检查 Python 3 和 convert_accounts.py 是否存在
- 彩色输出:使用 ANSI 颜色代码,成功/失败信息更醒目
- UTF-8 支持:自动设置
LANG=en_US.UTF-8确保中文正常显示 - 路径空格处理:完整支持包含空格的文件/文件夹路径