# Dựng lại workflow trong giao diện

Kế hoạch này mô tả đồ thị gốc v1. Hãy tạo các nút bằng cách tìm mã định danh kỹ thuật của chúng trong ComfyUI. Nhãn dịch có thể khác nhau. Các số trong ngoặc đơn là mã định danh trong JSON được cung cấp, hữu ích để đọc các liên kết của nó; giao diện có thể gán các số khác trong quá trình dựng lại thủ công.

## Các nút chung

| Mã định danh | Kiểu core | Cài đặt | Đầu ra được dùng |
| --- | --- | --- | --- |
| 1 | CheckpointLoaderSimple | sd_xl_base_1.0.safetensors | MODEL, CLIP, VAE |
| 2 | EmptyLatentImage | width 1024, height 1024, batch_size 1 | LATENT |
| 3 | CLIPTextEncode | `negative_prompt` của manifeste | CONDITIONING |

Nối CLIP của bộ nạp (1, slot 1) với đầu vào clip của văn bản tiêu cực (3, slot 0).

## Ba nhánh cần tạo

| Biến thể | Văn bản tích cực | KSampler | VAEDecode | SaveImage |
| --- | --- | --- | --- | --- |
| A, chính diện | 4 | 5 | 6 | 7 |
| B, bên hông | 8 | 9 | 10 | 11 |
| C, ngược sáng | 12 | 13 | 14 | 15 |

Sao chép `prompt` đầy đủ của từng biến thể vào CLIPTextEncode tích cực tương ứng. Cả ba văn bản đều dùng chung tiền tố `common_positive_prompt` rồi đến câu `light`. Phần tiêu cực chung không thay đổi.

Với **mỗi** nhánh, hãy thực hiện tám kết nối sau:

1. CLIP của bộ nạp → clip của văn bản tích cực.
2. MODEL của bộ nạp → model của KSampler.
3. CONDITIONING của văn bản tích cực → positive của KSampler.
4. CONDITIONING của văn bản tiêu cực chung → negative của KSampler.
5. LATENT của latent trống chung → latent_image của KSampler.
6. LATENT của KSampler → samples của VAEDecode.
7. VAE của bộ nạp → vae của VAEDecode.
8. IMAGE của VAEDecode → images của SaveImage.

Tổng cộng: 1 kết nối chung + 3 × 8 = **25 kết nối**. Một nút SaveImage 0.37.0 cũng có đầu ra IMAGE; hãy để nó không được kết nối. Không cần nút bên ngoài nào cũng như không cần đầu vào hình ảnh nào.

## Tham số của ba KSampler

| Widget | Giá trị |
| --- | --- |
| seed | 24092026 |
| control_after_generate | fixed |
| steps | 24 |
| cfg | 6.5 |
| sampler_name | euler |
| scheduler | normal |
| denoise | 1.0 |

Trong JSON UI 0.4, `widgets_values` tuân theo thứ tự này: `[24092026, "fixed", 24, 6.5, "euler", "normal", 1.0]`. Điều khiển `fixed` là một widget của giao diện được thêm vào seed; nó không phải là một đối số bổ sung của hàm Python `sample`.

Các đầu vào được nối của KSampler tuân theo thứ tự `model`, `positive`, `negative`, `latent_image`. Các đầu ra của bộ nạp tuân theo thứ tự `MODEL`, `CLIP`, `VAE`. Sự phân biệt giữa widget và đầu cắm này giúp tránh làm lệch các giá trị trong một JSON viết tay.

## Tên đầu ra và kiểm soát

Hãy nhập vào mỗi SaveImage `output_prefix` của manifeste. Các tiền tố khác nhau để đầu ra không trở thành một chuỗi vô danh. Việc đánh số cuối cùng do ComfyUI quản lý.

Lưu bản dựng lại của bạn vào một JSON mới. Các mã định danh và vị trí có thể khác so với thư mục; trình xác thực được cung cấp, vốn cố ý nghiêm ngặt, chỉ chấp nhận các mã định danh của công thức v1. Sau đó hãy so sánh trực quan chuỗi và các tham số, rồi xác nhận việc tạo trong môi trường của bạn. Chỉ riêng lược đồ UI không chứng minh được sự hiện diện của mô hình cũng như sự thành công của phép tính.

Nguồn: [định nghĩa các nút 0.37.0](https://github.com/Comfy-Org/ComfyUI/blob/73c9bad4d21e7addbe1d13bc92eee0f1431b017d/nodes.py), [kiểm soát giá trị của frontend 1.52.7](https://github.com/Comfy-Org/ComfyUI_frontend/blob/1a7a6b82514874545dc5e8203d0bd2188c2d9b18/src/scripts/widgets.ts), [lược đồ UI 0.4](https://docs.comfy.org/specs/workflow_json_0.4).
