File size: 6,327 Bytes
2c7fbf0
f9bba77
 
 
 
2c7fbf0
f9bba77
2c7fbf0
f9bba77
2c7fbf0
 
f9bba77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e02bdb
f9bba77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e02bdb
f9bba77
 
 
 
 
 
8e02bdb
f9bba77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
---
title: JiMeng Intl API
emoji: 🎨
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
pinned: false
license: mit
---

# JiMeng Intl API on Hugging Face

这个目录用于把 `jimeng-free-api-intl`**源码构建**方式部署到 Hugging Face Docker Spaces。

当前国际版已经包含大量 Dreamina 专属改动,因此**不再适合继续拉取官方现成镜像**,而是应该由 HF 直接基于你的国际版源码构建镜像。

## 方案说明

- 构建方式:HF 基于当前目录源码构建镜像
- HF Spaces 对外端口:`7860`
- 项目实际读取端口环境变量:`SERVER_PORT`
- 兼容方式:通过 `CMD` 把 HF 注入的 `PORT` 转成项目使用的 `SERVER_PORT`
- 国际版上游:`dreamina.capcut.com` / `mweb-api-sg.capcut.com` / `commerce-api-sg.capcut.com`
- 调用方式:OpenAI 兼容,调用端只需要 `BASE_URL + API_KEY`

HF Space 实际会收到项目根目录源码,然后再用当前目录提供的 `Dockerfile``.dockerignore``README.md` 覆盖 Space 根目录对应文件,最后在 Space 中执行源码构建。

## 为什么这样能跑

项目默认配置端口是 `8000`,但代码里也支持通过环境变量覆盖:

- `src/lib/environment.ts`:读取 `SERVER_PORT`
- `configs/dev/service.yml`:默认端口是 `8000`
- `huggingface-HF-JiMeng/Dockerfile`:会在 HF 上直接构建国际版源码并安装 Playwright Chromium

所以 HF Spaces 只需要:

1. 使用 Docker SDK
2. 构建本目录中的源码镜像
3. 在启动时把 `PORT` 映射为 `SERVER_PORT`

## 部署步骤

### 方案一:GitHub 自动推送到 HF Space

适合你当前的目标:代码先推到 GitHub,再由 GitHub Actions 同步项目根目录源码到 Hugging Face Space,并用本目录中的 Space 专用文件覆盖根目录文件,最后由 HF 基于这些文件构建。

1. 在 Hugging Face 新建一个 `Docker` 类型的 Space。
2. 在 GitHub 仓库中添加以下 Secrets:
   - `HF_TOKEN`:你的 Hugging Face Access Token,至少需要对目标 Space 有写权限
   - `HF_SPACE_REPO`:你的 Space 仓库名,格式为 `username/space_name`
3. 将本仓库推送到你的 GitHub 仓库:`https://github.com/Viciy2023/JiMengIntl.git`
4. 推送 `main` 分支后,GitHub Actions 会自动把项目源码同步到 HF Space,并用 `huggingface-HF-JiMeng` 目录中的 Space 专用文件覆盖根目录对应文件。
5. HF Space 收到更新后会自动开始构建。
6. 构建完成后访问:`https://<你的-space>.hf.space/ping`

对应工作流文件:

```text
.github/workflows/deploy-hf-space.yml
```

### 方案二:手动上传到 HF Space

1. 在 Hugging Face 新建一个 `Docker` 类型的 Space。
2. 把本目录中的文件上传到 Space 根目录。
3. 等待构建完成。
4. 构建完成后访问:`https://<你的-space>.hf.space/ping`

## 建议的 Space Secrets / Variables

国际版建议通过完整 Cookie Header 注入账号,并使用固定 API Key 对外提供服务。

### HF Secrets(敏感信息)

- `DREAMINA_API_KEY`
中文注释:对外提供给调用方的统一 API Key,例如 `sk-51205420185fadfaf`

- `DREAMINA_COOKIE_HEADER`
中文注释:单账号完整国际版 Cookie Header

- `DREAMINA_COOKIE_HEADERS`
中文注释:多账号完整国际版 Cookie Header 数组,推荐使用这个字段做随机轮询

### HF Variables(普通运行配置)

- `UPSTREAM_PROVIDER=dreamina-intl`
中文注释:强制使用国际版 Dreamina 上游

- `SERVER_HOST=0.0.0.0`
中文注释:让容器监听外部地址

- `TZ=Asia/Shanghai`
中文注释:服务日志时区

- `DREAMINA_PAGE_BASE_URL=https://dreamina.capcut.com`
中文注释:Dreamina 页面域名

- `DREAMINA_MWEB_API_BASE_URL=https://mweb-api-sg.capcut.com`
中文注释:Dreamina 图片/视频生成与历史查询域名

- `DREAMINA_COMMERCE_API_BASE_URL=https://commerce-api-sg.capcut.com`
中文注释:Dreamina 积分/权益域名

- `DREAMINA_REGION=HK`
中文注释:当前抓包验证可用的区域代码

- `DREAMINA_LAN=en`
中文注释:接口头中的语言标识

- `DREAMINA_LOC=HK`
中文注释:接口头中的位置标识

- `DREAMINA_ACCEPT_LANGUAGE=en-US`
中文注释:接口头中的 Accept-Language

注意:不要把真实 Cookie Header 或 sessionid 直接写进公开仓库文件。

## GitHub Secrets 说明

GitHub Actions 自动部署需要这两个 Secrets:

- `HF_TOKEN`
- `HF_SPACE_REPO`

示例:

```text
HF_SPACE_REPO=DanielleNguyen/JiMengIntl
```

`HF_TOKEN` 建议在 Hugging Face 的 Settings -> Access Tokens 中创建,并授予可写 Space 的权限。

## 调用方式

部署成功后,调用方只需要:

```text
BASE_URL=https://<your-intl-space>.hf.space/v1
API_KEY=sk-51205420185fadfaf
```

服务端会在每次请求时随机选择一条完整国际版 Cookie Header 使用。

## 验证接口

健康检查:

```bash
curl https://<你的-space>.hf.space/ping
```

国际版文生图示例:

```bash
curl -X POST "https://<你的-space>.hf.space/v1/images/generations" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-51205420185fadfaf" \
  -d '{
    "model": "jimeng-4.6",
    "prompt": "a beautiful sunset by a lake house",
    "ratio": "16:9",
    "resolution": "2k"
  }'
```

国际版文生视频示例:

```bash
curl -X POST "https://<your-intl-space>.hf.space/v1/videos/generations" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-51205420185fadfaf" \
  -d '{
    "model": "dreamina_ic_generate_video_model_vgfm_3.0_fast",
    "prompt": "a cat dancing",
    "ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  }'
```

## 已知风险

- 上游镜像标签使用 `latest`,后续上游更新可能改变行为。
- 项目包含 Playwright/Chromium,HF Space 构建时间会比纯 Node 服务更长。
- 国际版视频/Seedance 仍依赖浏览器代理和前端签名链,HF 环境稳定性取决于运行资源和上游反爬策略。
- 源码构建时间会比拉现成镜像更长,但这是国际版保持最新逻辑的必要代价。

## 回滚方式

如果国际版新改动有问题,最稳妥的回滚方式是:

1. 回滚 GitHub 仓库 `JiMengIntl` 中的源码提交
2. 重新 push 到 `main`
3. GitHub Actions 会再次同步到 HF Space 并触发重建