save code

This commit is contained in:
Ubuntu
2026-06-17 23:27:34 +08:00
parent c15a3c2e15
commit 24da4eae6f
3 changed files with 106 additions and 0 deletions
+96
View File
@@ -0,0 +1,96 @@
# GPU Worker 改动说明
测试页面已新增字段,worker 侧需对应接收并使用。
## 涉及接口
| 接口 | 路径 | 新增字段 |
|------|------|----------|
| 接口 2C端生发) | `POST /api/v1/hair/grow` | `prompt` |
| 接口 3B端生发) | `POST /api/v1/hair/grow-b` | `prompt` |
## 1. 新增 `prompt` 参数
### 接口 2`/api/v1/hair/grow`
Handler 签名新增:
```python
prompt: str = Form(default="补充遮罩区域的头发", description="ComfyUI 提示词,会替换工作流节点60的文本"),
```
透传链路:
```
handler → generate_grow_results(image, gender, use_mask, prompt)
→ comfyui.run(buf, prompt=prompt)
```
### 接口 3`/api/v1/hair/grow-b`
Handler 签名新增:
```python
prompt: str = Form(default="补充遮罩区域的头发", description="ComfyUI 提示词,会替换工作流节点60的文本"),
```
透传链路:
```
handler → generate_grow_b(marked, use_mask, prompt)
→ comfyui.run(buf, prompt=prompt)
```
### `hairline/comfyui.py` 改动
1. 新增节点常量:
```python
_PROMPT_NODE = "60" # JjkText:提示词
```
2. `run()` 函数签名改为:
```python
def run(rgba_png_bytes: bytes, timeout: float = COMFY_TIMEOUT, prompt: str = None) -> bytes:
```
3.`run()` 内部,注入图片和 seed 之后(约第81行后)加入:
```python
if prompt is not None:
wf[_PROMPT_NODE]["inputs"]["text"] = prompt
```
### `hairline/service.py` 改动
两个服务函数各加一个 `prompt` 参数,透传给 `comfyui.run()`
- `generate_grow_results(image_bgr, gender, use_mask=True, prompt=None)` — 两处 `comfyui.run(buf.getvalue())` 都改为 `comfyui.run(buf.getvalue(), prompt=prompt)`
- `generate_grow_b(marked_bgr, use_mask=True, prompt=None)``comfyui.run(buf.getvalue())` 改为 `comfyui.run(buf.getvalue(), prompt=prompt)`
## 2. 已有字段回顾
`use_mask``prompt` 测试页面均已就绪,表单字段一览:
| 接口 | 字段 | 类型 | 默认值 | 说明 |
|------|------|------|--------|------|
| 2 | `image_file` | file | — | 用户照片(三选一) |
| 2 | `image_url` | string | — | 同上 |
| 2 | `image_base64` | string | — | 同上 |
| 2 | `gender` | string | `female` | `male` / `female` |
| 2 | `use_mask` | bool | `true` | inpaint 遮罩开关 |
| 2 | `prompt` | string | `补充遮罩区域的头发` | ComfyUI 提示词 |
| 3 | `marked_image_file` | file | — | 划线图(三选一) |
| 3 | `marked_image_url` | string | — | 同上 |
| 3 | `marked_image_base64` | string | — | 同上 |
| 3 | `use_mask` | bool | `true` | 画发际线开关 |
| 3 | `prompt` | string | `补充遮罩区域的头发` | ComfyUI 提示词 |
## 3. 当前工作流提示词节点
`add_hair.json` 中节点 **60**`JjkText`)为提示词节点,当前硬编码文本:
> 补充遮罩区补充遮罩区域内的头发,头发填满遮罩区域。发际线往下挡住额头
`comfyui.run()` 收到 `prompt` 参数后将替换此文本。
+5
View File
@@ -84,6 +84,10 @@
<button class="btn btn-outline btn-sm" onclick="clearResults()">清除</button>
</div>
<div class="hint">JPG/PNG ≤1MB &nbsp;|&nbsp; 生发图生成较慢(数十秒~数分钟),请耐心等待</div>
<div style="margin-top:10px;display:flex;align-items:center;gap:8px">
<label style="font-size:13px;font-weight:600;color:#374151;white-space:nowrap">💬 提示词</label>
<input type="text" id="promptInput" value="补充遮罩区域的头发" style="flex:1;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;max-width:500px">
</div>
<div id="statusBar" class="status hidden"></div>
</div>
</div>
@@ -126,6 +130,7 @@ async function submitTest() {
const fd = new FormData(); fd.append('image_file', f); fd.append('gender', $('gender').value);
fd.append('use_mask', $('useMask').value);
fd.append('prompt', $('promptInput').value);
try {
const r = await fetch(API_BASE + '/api/v1/hair/grow', { method:'POST', body:fd });
const json = await r.json();
+5
View File
@@ -91,6 +91,10 @@
</select>
<div class="hint">false 时跳过划线检测、直接送划线图,用于对比测试</div>
</div>
<div class="upload-group" style="margin-top:14px">
<div class="label">💬 提示词(prompt</div>
<input type="text" id="promptInput" value="补充遮罩区域的头发" style="width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;max-width:500px">
</div>
<div style="margin-top:14px;display:flex;gap:12px;align-items:center">
<button class="btn btn-primary" id="submitBtn" onclick="submitTest()">🚀 提交</button>
<button class="btn btn-outline btn-sm" onclick="clearResults()">清除</button>
@@ -153,6 +157,7 @@ async function submitTest() {
const fd = new FormData();
fd.append('marked_image_file', mf);
fd.append('use_mask', $('useMask').value);
fd.append('prompt', $('promptInput').value);
try {
const r = await fetch(API_BASE + '/api/v1/hair/grow-b', { method:'POST', body:fd });