肖像大师:基础角色设定
Portrait Master's Base Character Module, in Chinese
- text_out
If you've ever stared at a bare CLIPTextEncode box and tried to describe a person with words, you know the pain: "Chinese woman, 25 years old, almond eyes, oval face…" - and it comes out looking like nobody in particular. This node is the answer to that, except it's in Chinese and it hands you a dozen dropdowns instead of a blank text field. PortraitMasterBaseCharacterCN (肖像大师:基础角色设定) is the "who is this person" half of the Portrait Master v3 split: it turns widget values into prompt text for the core character - shot type, gender, age, ethnicity, body type, eyes, lips, face, hair, beard.
It's part of comfyui-portrait-master-cn, a Chinese localization of Stefano Flore's well-known Portrait Master. The name is a lie in the best way: this is a pure prompt-builder, no model downloads, no API key, no GPU cost. The only "processing" is string assembly.
How it works
The node reads text lists from the pack's lists/ folder - each file holds lines in Chinese/English pairs, which is the whole trick of the localization: you pick 黑发 from a dropdown and it quietly inserts (black hair:1.05) into the prompt. Every selector with a - value is skipped entirely. Every weight slider above 0 gets applied as ComfyUI's (token:weight) syntax. The 随机 🎲 entry picks a random option from that list.
That's it. It's not doing anything clever - and that's the appeal. You get the consistency of a real prompt-writing system instead of trusting your memory for what "hazel eyes" is called this week.
The inputs that matter
The node has a wall of required inputs, but you genuinely only set a handful:
- 镜头 (shot) + 镜头权重 - headshot, bust, full body, close-up, and more. This frames everything else, so it's usually the first thing you pick.
- 性别, 年龄, 国籍_1 / 国籍_2 + 国籍混血 - the person. Age is an integer that emits
22-years-old. - 发型 / 发色 / 头发长度, 眼睛颜色 / 眼睛形状, 脸型, 体型 - the details that stop the "who is this person" problem.
There's also 启用 (enable), a master toggle, plus two optional inputs: text_in (chain another module's output in) and seed (make the 🎲 randomizers reproducible). The single output, text_out (STRING), is what you feed into CLIPTextEncode.
Wiring it up
The v3 modules are designed to chain: each takes text_in and emits text_out, so you can run BaseCharacter → SkinDetails → StylePose → Makeup in any order and they concatenate. One output string goes to the positive prompt. In the Chinese fork, all the widget names stay Chinese but the emitted prompt text is English - so your SDXL checkpoint sees normal tags.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/DropFan/comfyui-portrait-master-cn
Then restart ComfyUI. Or use ComfyUI Manager and search for comfyui-portrait-master-cn. There's no requirements.txt and nothing to download - it's just Python text files. (ComfyUI Manager may list it as the CN fork, not the original florestefano1975 pack; make sure you grab the DropFan one if you want the Chinese UI.)
Where people get burned
- The nationality mix syntax. With both 国籍_1 and 国籍_2 set, the node emits
[chinese:spanish:0.5]- ComfyUI's standardCLIPTextEncodedoesn't natively understand that weighted-alternation syntax, so it'll be treated literally or ignored. The README recommends comfyui-prompt-control for this. If you're mixing ethnicities, install that or just pick one nationality and skip the feature. - 🎲 needs a seed. The randomizers are useless unless you connect a seed input; otherwise they re-roll every run.
- Weights only mean something on CLIP encoders.
(token:1.2)works on SD1.5/SDXL-lineage checkpoints. If your model uses an LLM text encoder (Flux, Z-Image), the emitted(...)syntax is mostly ignored - the structure still helps, the weights don't. - The output is lowercased and comma-joined, which is fine for tags but worth knowing before you diff two prompts.
If your checkpoint is weak at faces, no prompt node will save it - Portrait Master's own docs point at FormulaXL 2.0 for realism, and honestly the checkpoint matters more than any of these sliders. But once you have a decent model, this is the fastest way to get a repeatable, hand-tuned character instead of typing your way through it.
Inputs (30)
| Name | Type | Default | Description |
|---|---|---|---|
| 镜头 | COMBO | - | 13 options: -, 随机 🎲, 头像, 头肩像, 半身肖像, 全身肖像, +7 |
| 镜头权重 | FLOAT | 1.000–2 | — |
| 性别 | COMBO | - | 6 options: -, 随机 🎲, 男, 女, 男孩, 女孩 |
| 跨性别程度 | FLOAT | 0.000–2 | — |
| 丑陋程度 | FLOAT | 0.000–2 | — |
| 大众脸 | FLOAT | 0.000–2 | — |
| 年龄 | INT | 221–120 | — |
| 国籍_1 | COMBO | - | 194 options: -, 随机 🎲, 阿富汗人, 阿尔巴尼亚人, 阿尔及利亚人, 安道尔人, +188 |
| 国籍_2 | COMBO | - | 194 options: -, 随机 🎲, 阿富汗人, 阿尔巴尼亚人, 阿尔及利亚人, 安道尔人, +188 |
| 国籍混血 | FLOAT | 0.500–1 | — |
| 体型 | COMBO | - | 36 options: -, 随机 🎲, 强壮的, 丰满的, 健壮的, 胖乎乎的, +30 |
| 体型权重 | FLOAT | 1.000–2 | — |
| 眼睛颜色 | COMBO | - | 19 options: -, 随机 🎲, 白化外观, 琥珀色, 琥珀棕色, 黑色, +13 |
| 眼睛形状 | COMBO | - | 14 options: -, 随机 🎲, 杏仁眼形状, 亚洲人眼睛形状, 眼距近的眼睛形状, 深陷的眼睛形状, +8 |
| 唇色 | COMBO | - | 35 options: -, 随机 🎲, 浆果色唇, 黑色唇, 蓝色唇, 古铜色唇, +29 |
| 唇形 | COMBO | - | 24 options: -, 随机 🎲, 咬唇, 弓形唇, 闭唇, 丘比特弓唇, +18 |
| 面部表情 | COMBO | - | 44 options: -, 随机 🎲, 愉快的, 愤怒的, 焦虑的, 吃惊的, +38 |
| 面部表情权重 | FLOAT | 1.000–2 | — |
| 脸型 | COMBO | - | 26 options: -, 随机 🎲, 圆形, 娃娃脸, 菱形, 心形, +20 |
| 脸型权重 | FLOAT | 1.000–2 | — |
| 面部不对称 | FLOAT | 0.000–2 | — |
| 发型 | COMBO | - | 122 options: -, 随机 🎲, 爆炸头, A 字波波头, 不对称发型, 挑染, +116 |
| 发色 | COMBO | - | 26 options: -, 随机 🎲, 赤褐色, 米色 (浅褐色), 黑色, 金色(女)/浅黄色(男), +20 |
| 头发长度 | COMBO | - | 9 options: -, 随机 🎲, 光头, 超短发, 短, 中, +3 |
| 凌乱程度 | FLOAT | 0.000–2 | — |
| 胡子 | COMBO | - | 35 options: -, 随机 🎲, 胡茬, 山羊胡, 络腮胡, 凡戴克胡, +29 |
| 胡子颜色 | COMBO | - | 26 options: -, 随机 🎲, 赤褐色, 米色 (浅褐色), 黑色, 金黄色, +20 |
| 启用 | BOOLEAN | true | — |
| text_inopt | STRING | — | |
| seedopt | INT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text_out | STRING | — |