jimeng-free-api-all/CLAUDE.md

16 KiB
Raw Blame History

CLAUDE.md

本文件为 Claude Code (claude.ai/claude-code) 在此代码仓库中工作时提供指导。

项目概述

即梦 AI 免费 API 服务 - 逆向工程的 API 服务器,提供 OpenAI 兼容接口,封装即梦 AI 的图像和视频生成能力。

版本: v0.8.6

核心功能:

  • 文生图:支持 jimeng-5.0、jimeng-4.6、jimeng-4.5 等多款模型,最高 4K 分辨率
  • 图生图:多图合成,支持 1-10 张输入图片
  • 视频生成jimeng-video-3.5-pro 等模型,支持首帧/尾帧控制
  • Seedance 2.0:多模态智能视频生成,模型名 jimeng-video-seedance-2.0(兼容 seedance-2.0),支持图片/视频/音频混合上传,@1、@2 占位符引用素材4-15 秒时长
  • OpenAI 兼容:完全兼容 OpenAI API 格式,无缝对接现有客户端
  • 多账号支持:支持多个 sessionid 轮询使用

构建和开发命令

# 安装依赖
npm install

# 安装 Chromium 浏览器Seedance 模型需要)
npx playwright-core install chromium --with-deps

# 开发模式(热重载)
npm run dev

# 生产环境构建
npm run build

# 启动生产服务
npm start

Docker 命令

# 构建 Docker 镜像
docker build -t jimeng-free-api-all:latest .

# 运行容器
docker run -it -d --init --name jimeng-free-api-all -p 8000:8000 -e TZ=Asia/Shanghai jimeng-free-api-all:latest

# 使用 Docker Hub 预构建镜像
docker pull wwwzhouhui569/jimeng-free-api-all:latest
docker run -it -d --init --name jimeng-free-api-all -p 8000:8000 -e TZ=Asia/Shanghai wwwzhouhui569/jimeng-free-api-all:latest

项目架构

src/
├── index.ts                    # 应用入口
├── daemon.ts                   # 守护进程管理
├── api/
│   ├── controllers/            # 业务逻辑控制器
│   │   ├── core.ts            # 核心工具Token处理、积分管理、请求封装
│   │   ├── images.ts          # 图像生成逻辑(文生图、图生图)
│   │   ├── videos.ts          # 视频生成逻辑(含 Seedance 2.0
│   │   └── chat.ts            # 对话补全逻辑
│   ├── routes/                 # API 路由定义
│   │   ├── index.ts           # 路由聚合器
│   │   ├── images.ts          # /v1/images/* 端点
│   │   ├── videos.ts          # /v1/videos/* 端点
│   │   ├── video.ts           # /v1/video/* 端点videos 的包装路由)
│   │   ├── chat.ts            # /v1/chat/* 端点
│   │   ├── models.ts          # /v1/models 端点
│   │   ├── ping.ts            # /ping 健康检查端点
│   │   └── token.ts           # /token/* Token管理端点
│   └── consts/
│       └── exceptions.ts       # API 异常定义
└── lib/
    ├── server.ts              # Koa 服务器配置(含中间件栈)
    ├── browser-service.ts     # 浏览器代理服务Seedance shark 反爬绕过)
    ├── config.ts              # 配置管理
    ├── logger.ts              # 日志工具
    ├── util.ts                # 辅助工具函数
    ├── environment.ts         # 环境变量
    ├── initialize.ts          # 初始化逻辑
    ├── http-status-codes.ts   # HTTP 状态码
    ├── request/
    │   └── Request.ts         # 请求解析与验证(含文件上传规范化)
    ├── response/
    │   ├── Response.ts        # 响应包装器
    │   ├── Body.ts            # 响应体
    │   └── FailureBody.ts     # 错误响应体
    ├── exceptions/
    │   ├── Exception.ts       # 基础异常类
    │   └── APIException.ts    # API 异常类
    ├── interfaces/
    │   └── ICompletionMessage.ts  # 对话消息接口
    └── configs/               # 配置模式
        ├── model-config.ts    # 模型配置(模型参数、分辨率映射等)
        ├── service-config.ts  # 服务配置
        └── system-config.ts   # 系统配置

API 端点

端点 方法 说明
/v1/chat/completions POST OpenAI 兼容的对话接口(用于图像/视频生成)
/v1/images/generations POST 文生图/图生图接口(支持 images 可选参数)
/v1/images/compositions POST 图生图接口(支持文件上传,向后兼容)
/v1/videos/generations POST 视频生成接口(含 Seedance 2.0 / 2.0-fast
/v1/video/generations POST 视频生成接口(别名路由)
/v1/models GET 获取可用模型列表
/token/check POST 检查 Token 有效性
/token/points POST 查询账户积分
/ping GET 健康检查端点

关键技术细节

认证方式

  • 使用即梦网站的 sessionid Cookie 作为 Bearer Token
  • 多账号支持:逗号分隔多个 sessionidAuthorization: Bearer sessionid1,sessionid2
  • 每次请求随机选择一个 sessionid 使用

模型映射

图像模型

用户模型名 内部模型名 Draft 版本 说明
jimeng-5.0 high_aes_general_v50 3.3.9 5.0 正式版(原 jimeng-5.0-preview最新模型
jimeng-4.6 high_aes_general_v42 3.3.9 推荐使用
jimeng-4.5 high_aes_general_v40l 3.3.4 高质量模型
jimeng-4.1 high_aes_general_v41 3.3.4 高质量模型
jimeng-4.0 high_aes_general_v40 3.3.4 稳定版本
jimeng-3.1 high_aes_general_v30l_art_fangzhou - 艺术风格
jimeng-3.0 high_aes_general_v30l - 通用模型
jimeng-2.1 - - 旧版模型
jimeng-2.0-pro - - 旧版专业模型
jimeng-2.0 - - 旧版模型
jimeng-1.4 - - 早期模型
jimeng-xl-pro - - XL 专业模型

视频模型

用户模型名 内部模型名 说明
jimeng-video-3.5-pro dreamina_ic_generate_video_model_vgfm_3.5_pro 最新视频模型
jimeng-video-3.0 - 视频生成 3.0
jimeng-video-3.0-pro - 视频生成 3.0 专业版
jimeng-video-2.0 - 视频生成 2.0
jimeng-video-2.0-pro - 视频生成 2.0 专业版
jimeng-video-seedance-2.0 dreamina_seedance_40_pro Seedance 2.0(上游标准名称,推荐)
seedance-2.0 dreamina_seedance_40_pro 多图智能视频生成(向后兼容别名)
seedance-2.0-pro dreamina_seedance_40_pro 多图智能视频生成专业版(向后兼容别名)
jimeng-video-seedance-2.0-fast dreamina_seedance_40 Seedance 2.0-fast 快速版(上游标准名称)
seedance-2.0-fast dreamina_seedance_40 Seedance 2.0-fast 快速版(向后兼容别名)

请求参数

图像生成参数 (/v1/images/generations)

参数 类型 必填 默认值 说明
model string jimeng-4.5 模型名称
prompt string - 提示词jimeng-4.x/5.x 支持多图生成
images array - 图片URL数组1-10张提供则走图生图模式不提供则走文生图模式
negative_prompt string "" 反向提示词
ratio string 1:1 宽高比1:1, 4:3, 3:4, 16:9, 9:16, 3:2, 2:3, 21:9
resolution string 2k 分辨率1k, 2k, 4k
sample_strength float 0.5 精细度 0.0-1.0
response_format string url url 或 b64_json

说明:

  • images 参数为空或不提供时,接口执行文生图功能
  • images 参数提供1-10张图片接口执行图生图功能
  • 支持 application/jsonimages 为 URL 数组)和 multipart/form-data(通过 images 字段上传文件)两种请求格式
  • 图生图模式下,响应会额外包含 input_imagescomposition_type 字段

图生图参数 (/v1/images/compositions) - 向后兼容

  • /v1/images/generations 相同的参数
  • images 字段为必填1-10张图片
  • 额外支持 multipart/form-data 文件上传

视频生成参数 (/v1/videos/generations)

参数 类型 必填 默认值 说明
model string jimeng-video-3.0 模型名称
prompt string - 视频描述(图生视频时可选)
ratio string 1:1 宽高比1:1, 4:3, 3:4, 16:9, 9:16
resolution string 720p 分辨率480p, 720p, 1080p
duration number 5 时长4-15秒Seedance、5 或 10 秒(普通)
file_paths / filePaths array [] 首帧/尾帧图片 URL
files file[] - 上传的素材文件(图片/视频/音频multipart

Seedance 2.0 / 2.0-fast 专用参数

  • 使用 unified_edit_input 结构,包含 material_listmeta_list
  • 支持多模态素材混合上传图片ImageX、视频/音频VOD
  • 素材类型自动检测:通过 MIME 类型或文件扩展名判断image/video/audio
  • 上游标准模型名:jimeng-video-seedance-2.0(兼容 seedance-2.0seedance-2.0-pro
  • 快速版模型名:jimeng-video-seedance-2.0-fast(兼容 seedance-2.0-fast
  • 内部模型(标准版):dreamina_seedance_40_probenefit_typedreamina_video_seedance_20_pro
  • 内部模型(快速版):dreamina_seedance_40benefit_typedreamina_seedance_20_fast(注意:无 video_ 前缀)
  • Draft 版本3.3.9
  • 时长范围4-15 秒(连续范围,与上游 iptag/jimeng-api 一致)
  • 提示词占位符:@1@2@图1@图2@image1@image2 引用上传的素材
  • 支持的素材格式图片jpg/png/webp/gif/bmp、视频mp4/mov/m4v、音频mp3/wav

Shark 反爬与浏览器代理v0.8.4

  • 即梦对 Seedance 的 /mweb/v1/aigc_draft/generate 接口启用了 shark 安全中间件,要求请求携带 a_bogus 签名
  • a_bogus 由字节跳动 bdms SDK 在浏览器中生成依赖真实浏览器环境Canvas, WebGL, DOMNode.js 无法直接运行
  • 解决方案:通过 BrowserServicesrc/lib/browser-service.ts)使用 Playwright 启动 headless Chromiumbdms SDK 自动拦截 fetch 并注入 a_bogus
  • 仅 Seedance 的 generate 请求走浏览器代理,其他请求继续用 Node.js axios
  • 浏览器懒启动,首次 Seedance 请求时创建;每个 sessionId 独立会话10 分钟空闲自动清理
  • 资源拦截:屏蔽图片/字体/CSS仅允许 bdms SDK 相关脚本(白名单域名:vlabstatic.combytescm.comjianying.combyteimg.com

文件上传

  • 支持 multipart/form-data 文件上传
  • koa-body 配置最大文件大小 100MB
  • files 字段可以是对象或数组格式(在 Request.ts 中自动规范化)
  • 支持 formLimit/jsonLimit/textLimit100mb

上传通道v0.8.5

  • ImageX 通道(图片上传):get_upload_token(scene=2)imagex.bytedanceapi.comApplyImageUpload / CommitImageUpload,返回 URI 格式 tos-cn-i-{service_id}/{uuid}service_id 为 tb4s082cfz
  • VOD 通道(视频/音频上传):get_upload_token(scene=1)vod.bytedanceapi.comApplyUploadInner / CommitUploadInner,返回 vid 格式 v028xxxSpaceName 为 dreamina
  • AWS Signature V4 签名ImageX 使用 service=imagexVOD 使用 service=vodregion 均为 cn-north-1
  • VOD 上传自动返回媒体元数据Duration、Width、Height、Fps 等),音频时长 fallback 使用本地 WAV 头解析

分辨率支持

图片分辨率

分辨率 1:1 4:3 3:4 16:9 9:16 3:2 2:3 21:9
1k 1024×1024 768×1024 1024×768 1024×576 576×1024 1024×682 682×1024 1195×512
2k 2048×2048 2304×1728 1728×2304 2560×1440 1440×2560 2496×1664 1664×2496 3024×1296
4k 4096×4096 4608×3456 3456×4608 5120×2880 2880×5120 4992×3328 3328×4992 6048×2592

视频分辨率

分辨率 1:1 4:3 3:4 16:9 9:16
480p 480×480 640×480 480×640 854×480 480×854
720p 720×720 960×720 720×960 1280×720 720×1280
1080p 1080×1080 1440×1080 1080×1440 1920×1080 1080×1920

服务器中间件栈

  1. CORS 跨域支持koa2-cors()
  2. Range 请求koaRange(支持分段内容传输)
  3. 自定义异常处理器:捕获错误并返回 FailureBody 响应
  4. 自定义 JSON 解析器:处理 POST/PUT/PATCH 请求的 JSON清理问题 Unicode 字符,跳过 multipart 请求)
  5. Body 解析器koa-bodymultipart: truemaxFileSize: 100MB

开发规范

  1. TypeScript:项目使用 TypeScript + ESM 模块
  2. 路径别名:使用 @/ 别名指向 src/ 目录
  3. 日志:使用 @/lib/logger.ts 中的 logger 保持输出一致
  4. 配置:环境配置在 configs/ 目录,通过 @/lib/config.ts 加载
  5. API 兼容性:维护 OpenAI API 兼容性,确保客户端集成正常
  6. Node.js 版本≥16.0.0

测试 API 调用

# 文生图(使用最新模型)
curl -X POST http://localhost:8000/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_sessionid" \
  -d '{"model": "jimeng-5.0", "prompt": "美丽的日落风景", "ratio": "16:9", "resolution": "2k"}'

# 图生图(通过 images 参数)
curl -X POST http://localhost:8000/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_sessionid" \
  -d '{"model": "jimeng-4.5", "prompt": "将两张图融合成梦幻风格", "images": ["https://example.com/img1.jpg", "https://example.com/img2.jpg"], "ratio": "1:1", "resolution": "2k", "sample_strength": 0.5}'

# 图生图multipart 文件上传)
curl -X POST http://localhost:8000/v1/images/generations \
  -H "Authorization: Bearer your_sessionid" \
  -F "model=jimeng-4.5" \
  -F "prompt=将图片转换为油画风格" \
  -F "images=@/path/to/image1.jpg" \
  -F "ratio=1:1" \
  -F "resolution=2k"

# 视频生成
curl -X POST http://localhost:8000/v1/videos/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_sessionid" \
  -d '{"model": "jimeng-video-3.5-pro", "prompt": "一只小猫在草地上玩耍", "ratio": "16:9", "resolution": "720p"}'

# Seedance 2.0 多图视频(文件上传)
curl -X POST http://localhost:8000/v1/videos/generations \
  -H "Authorization: Bearer your_sessionid" \
  -F "model=jimeng-video-seedance-2.0" \
  -F "prompt=@1 和 @2 两人开始跳舞" \
  -F "ratio=4:3" \
  -F "duration=4" \
  -F "files=@/path/to/image1.jpg" \
  -F "files=@/path/to/image2.jpg"

# Seedance 2.0-fast 快速多图视频
curl -X POST http://localhost:8000/v1/videos/generations \
  -H "Authorization: Bearer your_sessionid" \
  -F "model=jimeng-video-seedance-2.0-fast" \
  -F "prompt=@1 图片中的人物开始微笑" \
  -F "ratio=4:3" \
  -F "duration=5" \
  -F "files=@/path/to/image1.jpg"

# Seedance 图片+音频混合视频
curl -X POST http://localhost:8000/v1/videos/generations \
  -H "Authorization: Bearer your_sessionid" \
  -F "model=jimeng-video-seedance-2.0-fast" \
  -F "prompt=@1 图片中的人物随着音乐 @2 开始跳舞" \
  -F "ratio=9:16" \
  -F "duration=5" \
  -F "files=@/path/to/image.png" \
  -F "files=@/path/to/audio.wav"

# 健康检查
curl http://localhost:8000/ping

# Token 检查
curl -X POST http://localhost:8000/token/check \
  -H "Content-Type: application/json" \
  -d '{"token": "your_sessionid"}'

配置

默认端口8000 配置文件在 configs/ 目录,使用 YAML 格式。