save code
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# GPU Worker 改动说明
|
||||
|
||||
测试页面已新增字段,worker 侧需对应接收并使用。
|
||||
|
||||
## 涉及接口
|
||||
|
||||
| 接口 | 路径 | 新增字段 |
|
||||
|------|------|----------|
|
||||
| 接口 2(C端生发) | `POST /api/v1/hair/grow` | `prompt` |
|
||||
| 接口 3(B端生发) | `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` 参数后将替换此文本。
|
||||
@@ -84,6 +84,10 @@
|
||||
<button class="btn btn-outline btn-sm" onclick="clearResults()">清除</button>
|
||||
</div>
|
||||
<div class="hint">JPG/PNG ≤1MB | 生发图生成较慢(数十秒~数分钟),请耐心等待</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();
|
||||
|
||||
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user