ComfyUI 왕초보 가이드 23 / 29장 · 기준: ComfyUI 0.34.0 / 프런트엔드 1.49.6 · Windows x64 / NVIDIA RTX Portable. 다른 버전에서는 메뉴와 노드 표시가 다를 수 있습니다.
이 장의 실습 자료 ZIP 내려받기 (1.8MB)
JSON·입력 PNG·본문 원본 이미지를 담았습니다. 압축을 푼 뒤 본문에 적힌 파일을 선택하세요. 모델과 프로그램은 포함하지 않습니다. 본문의 WebP는 가벼운 표시용 사본이며, PNG의 작업 정보·투명도와 원본 픽셀 비교에는 ZIP 안의 PNG를 사용하세요.
얼굴을 찾는 추가 노드와 모델을 준비하고, 얼굴 위치가 표시된 마스크 한 장을 저장합니다.
1. 만들 결과
22장에서는 직접 준비한 마스크로 옷을 수정했습니다. 이번에는 얼굴 위치를 자동으로 찾는 도구를 준비합니다. 원본을 읽어 얼굴 주변이 흰 사각형으로 표시된 PNG를 저장하면 기본 실습이 끝납니다.


완성 기준은 얼굴 위치 검출입니다. 아직 얼굴을 다시 그리거나 선명하게 만들지 않습니다. 흰 영역은 얼굴을 둘러싼 BBOX(bounding box, 경계 상자)이므로 사각형이 정상입니다. 머리카락·피부 윤곽을 정밀하게 딴 누끼 마스크와 구별하세요. 다음 24장에서 이 준비를 바탕으로 디테일러의 보정 강도를 다룹니다.
| 처음 만나는 말 | 쉬운 뜻·예 |
|---|---|
| 커스텀 노드 | ComfyUI에 추가하는 기능 상자입니다. 기본 노드만으로 부족한 얼굴 검출·부분 보정 같은 일을 맡깁니다. |
| 노드 팩 | 관련 노드 여러 개를 담은 꾸러미입니다. Impact Pack과 Impact Subpack은 별도 꾸러미입니다. |
| 의존성 | 노드가 일을 할 때 사용하는 코드 라이브러리입니다. 예를 들어 ultralytics가 검출 모델 실행을 돕습니다. |
| Manager · 관리자 | 노드 팩을 검색·설치·관리하는 도구입니다. 관리자가 없어도 필요한 노드를 수동으로 설치하면 실행할 수 있습니다. |
| 검출 모델 | 이미지에서 얼굴의 위치를 찾도록 학습한 파일입니다. SDXL Base나 LoRA처럼 새 그림의 화풍을 만드는 파일은 아닙니다. |
2. 준비물
기존 Windows NVIDIA용 Portable에 Impact Pack, Impact Subpack, 얼굴 검출 모델을 준비합니다. 이번 검출 작업은 SDXL Base·LoRA·프롬프트를 사용하지 않습니다. 기존 생성 모델은 다음 장에서 이어 씁니다.
| 필요한 것 | 담당하는 역할 |
|---|---|
| ComfyUI Impact Pack | BBOX Detector (combined)와 얼굴 디테일러(FaceDetailer). 이번에는 검출 노드를 실행하고, 디테일러는 검색되는지 확인합니다. |
| ComfyUI Impact Subpack | UltralyticsDetectorProvider. 검출 모델을 읽어 검출기에 전달합니다. Impact Pack만 설치하면 이 노드는 생기지 않습니다. |
| face_yolov8m.pt | 이번에 사용할 얼굴 검출 파일입니다. SAM·SAM2 모델은 기본 실습에 필요 없습니다. |
이 장의 기준 구성은 ComfyUI 0.34.0 / 프런트엔드 1.49.6 / Impact Pack 8.28.3 / Impact Subpack 1.3.5 / ultralytics 8.4.175입니다. 아래 코드 ZIP은 실습에 사용한 소스 버전으로 연결합니다. 이미 같은 노드와 모델이 있다면 다시 설치하지 말고 C. 검출 작업 실행으로 갑니다.
| 받을 파일 | 넣을 곳·다음 동작 |
|---|---|
| ch23-detector-check.json (ZIP) | 일반 워크플로 JSON. 찾기 쉬운 실습 폴더에 보관한 뒤 ComfyUI에서 Ctrl+O로 엽니다. |
| ch05_first_portrait_v2_00001_.png (ZIP) | ComfyUI/input. 앞 장의 같은 이름 파일이 있으면 그대로 사용합니다. |
face_yolov8m.pt · 제작자 다운로드 | ComfyUI/models/ultralytics/bbox. 없는 하위 폴더는 만듭니다. 재시작 후 노드에서 bbox/face_yolov8m.pt를 선택합니다. |
탐색기 한 창에 목적지 폴더를 먼저 열어 둡니다. 다른 창에서 받은 파일을 복사해 목적지에 붙여 넣으세요. 파일을 복사한 뒤 경로 문자열을 다시 복사하면 클립보드의 내용이 바뀝니다. JSON은 모델·입력 PNG를 포함하지 않으므로 세 파일의 역할을 구별해 보관합니다.
3. 따라 하기
A. 필요한 노드가 있는지 먼저 보기
- 현재 작업을 일반 JSON으로 보관합니다. 왼쪽 노드 라이브러리(n)를 누르고 검색 칸에
FaceDetailer를 입력합니다. 결과가 접혀 있으면 ImpactPack 왼쪽 화살표를 펼칩니다. Simple → 얼굴 디테일러가 이 노드입니다. 이름 뒤에 (파이프)가 붙은 항목과 구별합니다. - 검색어를 지우고
UltralyticsDetectorProvider,BBOX Detector도 차례로 검색합니다. 모두 있으면 설치 단계는 건너뛰세요. 이름을 바꾼 제공 JSON 안에서는 각각 얼굴 검출 모델, 얼굴 위치 찾기로 표시됩니다.

B. 노드가 없을 때만 · 필요한 기능 설치하기
이 경로는 얼굴 BBOX 검출과 이후 기본 디테일러에 필요한 구성을 수동으로 준비합니다. SAM2 등 Impact Pack의 모든 선택 기능을 한꺼번에 설치하는 경로는 아닙니다. 기본 실습에서는 아래 두 코드 폴더와 라이브러리를 설치하고 얼굴 검출 파일 하나만 사용합니다.
| 공식 코드 ZIP | 압축을 푼 뒤 최종 폴더 이름 |
|---|---|
| Impact Pack · 이번 실습 버전 ZIP | ComfyUI/custom_nodes/comfyui-impact-pack |
| Impact Subpack · 이번 실습 버전 ZIP | ComfyUI/custom_nodes/comfyui-impact-subpack |
- ComfyUI를 종료합니다. 실행 중인 작업이 끝난 뒤 ComfyUI 실행 창에서 Ctrl+C로 종료합니다. 브라우저 탭만 닫으면 실행 프로그램은 계속 켜져 있습니다.
- 공식 코드 ZIP 두 개를 받습니다. 탐색기에서 각각 오른쪽 클릭 → 7-Zip → 압축 풀기 또는 모두 추출을 선택합니다. 압축을 푼 안쪽에서
__init__.py와requirements.txt가 바로 보이는 폴더를 찾습니다. - 그 폴더 이름을 각각
comfyui-impact-pack,comfyui-impact-subpack으로 바꾸고ComfyUI/custom_nodes에 넣습니다. 예를 들어ComfyUI/custom_nodes/comfyui-impact-pack/__init__.py가 되어야 합니다. 같은 노드 팩을 이름만 달리해 중복으로 넣지 마세요. - 탐색기에서
python_embeded와ComfyUI가 함께 보이는 ComfyUI_windows_portable 폴더를 엽니다. 주소 표시줄에powershell을 입력하고 Enter를 누릅니다. 열린 창에서 아래 명령 한 줄을 실행합니다.
.\python_embeded\python.exe -m pip install --no-user segment-anything scikit-image piexif transformers opencv-python-headless scipy numpy dill matplotlib "ultralytics==8.4.175"
pip는 코드 라이브러리를 설치하는 도구입니다. 앞의 .\python_embeded\python.exe는 이 Portable에 포함된 Python을 가리킵니다. 다른 Python에 설치하면 ComfyUI가 찾지 못합니다. 명령에는 전체 업그레이드 옵션을 넣지 않았습니다. 이미 충족한 라이브러리는 그대로 사용합니다.
- 명령이 오류 없이 끝나면 준비물의
face_yolov8m.pt를ComfyUI/models/ultralytics/bbox에 둡니다. 다른 사람·손 검출 모델이나 SAM 모델을 추가로 받을 필요는 없습니다. - 평소 사용하는
run_nvidia_gpu.bat를 실행합니다. Manager용 실행 파일을 이미 만들었다면run_nvidia_gpu_manager.bat를 사용해도 됩니다. 실행 창에 나온 주소로 접속하고, 기존 브라우저 화면은 F5로 새로고침합니다. A의 노드 검색을 다시 해봅니다.
서버 재시작은 ComfyUI 실행 프로그램을 껐다 켜는 일이고, F5는 브라우저 화면만 다시 읽는 일입니다. 새 노드 코드를 넣은 뒤에는 F5만으로 끝내지 않습니다. 이 구성에서 SAM2를 사용할 수 없다는 안내만 나오는 것은 아래 얼굴 검출 실습의 실패가 아닙니다. 자세한 구별은 문제 해결 표를 보세요.
C. 검출 작업 실행하기
- 노드 라이브러리를 닫고 Ctrl+O로
ch23-detector-check.json을 엽니다. 아래쪽 보기 맞춤을 누릅니다. 01 모델·입력 → 02 얼굴 검출 → 03 정상 결과 확인의 세 그룹이 보입니다. - 검출할 입력 이미지에서
ch05_first_portrait_v2_00001_.png를 선택합니다. input 폴더에 넣지 않았다면 이 노드의 업로드할 파일 선택을 눌러 받은 PNG를 지정해도 됩니다. - 얼굴 검출 모델의
model_name을 클릭하고bbox/face_yolov8m.pt를 선택합니다. 앞의bbox/는 모델 하위 폴더 이름입니다. 새로 넣은 파일이 안 보이면 작업을 보관한 뒤 ComfyUI를 재시작하고 화면을 새로고침합니다. - 얼굴 위치 찾기의
threshold는 0.50,dilation은 0으로 둡니다. 제공 JSON에 이미 들어 있습니다. 선을 다시 연결하거나 노드를 더 추가할 필요가 없습니다. - 상단 실행을 한 번 누릅니다. 오른쪽 검출 마스크 저장에 검정 배경과 흰 사각형 한 개가 보이면 완료입니다. 파일은
ComfyUI/output/guide/ch23_face_mask_…png로 저장됩니다. 뒤 번호는 자동으로 붙습니다.

| 값·연결 | 쉽게 읽는 방법 |
|---|---|
| threshold 0.50 | 얼굴 후보를 받아들일 검출 점수 기준입니다. 낮추면 더 많은 후보가 통과할 수 있지만 오검출도 늘 수 있습니다. 정확도 50%나 얼굴 보정 강도 50%라는 뜻은 아닙니다. |
| dilation 0 | 찾은 마스크를 바깥으로 추가 확장하지 않습니다. 얼굴을 다시 그리는 denoise와 별개입니다. |
| BBOX_DETECTOR → bbox_detector | 검출 모델을 전달하는 연결입니다. 이 초록 출력으로 검출할 준비를 전달하고, 입력 IMAGE는 별도의 파란 선으로 보냅니다. |
| SEGM_DETECTOR의 빨간 × | 선택한 bbox 모델에는 정밀 윤곽 분할용 출력이 없다는 표시입니다. 이번에는 이 출력을 연결하지 않으므로 정상입니다. |
| MASK → MaskToImage → SaveImage | 찾은 범위 데이터를 흑백 그림으로 바꾸어 저장합니다. 원본 이미지 자체를 보정하는 연결은 아직 없습니다. |
제공 JSON의 정확한 설정·노드 연결
| 설정할 노드 | 입력값 |
|---|---|
| 검출할 입력 이미지 · 입력 사진 | 입력 파일 = ch05_first_portrait_v2_00001_.png |
| 얼굴 검출 모델 | model_name = bbox/face_yolov8m.pt |
| 얼굴 위치 찾기 | threshold = 0.5 dilation = 0 |
| 검출 마스크 저장 · ch23_face_mask | 파일명 접두사 = guide/ch23_face_mask |
현재 작업의 노드·연결 목록 · 노드 5개와 연결 4개
제공 JSON에 이미 들어 있는 노드와 연결입니다. 실수로 선을 바꿨을 때 이 목록과 대조하세요. 이름이 같은 노드는 역할·파일명으로 구별합니다.
| 노드 역할 | 검색할 기술 이름 |
|---|---|
| 검출할 입력 이미지 · 입력 사진 | LoadImage |
| 얼굴 검출 모델 | UltralyticsDetectorProvider |
| 얼굴 위치 찾기 | BboxDetectorCombined_v2 |
| 찾은 범위를 흑백으로 | MaskToImage |
| 검출 마스크 저장 · ch23_face_mask | SaveImage |
| 순서 | 출발 출력 | 도착 입력 |
|---|---|---|
| 1 | 얼굴 검출 모델 BBOX_DETECTOR → | 얼굴 위치 찾기 bbox_detector |
| 2 | 검출할 입력 이미지 · 입력 사진 이미지 → | 얼굴 위치 찾기 이미지 |
| 3 | 얼굴 위치 찾기 마스크 → | 찾은 범위를 흑백으로 마스크 |
| 4 | 찾은 범위를 흑백으로 이미지 → | 검출 마스크 저장 · ch23_face_mask 이미지 |
선택 · Manager가 필요한 경우 설치하고 열기
Manager는 여러 노드 팩을 검색·관리할 때 편리합니다. 기본 검출 작업을 마친 뒤 필요할 때 준비하세요. 공식 Portable 설치 안내에 따라 현재 버전의 Manager를 켭니다. 기존 설치가 있다면 중복 설치하지 않습니다.
- 작업을 저장하고 ComfyUI 실행 창을 종료합니다. B에서 설명한 Portable 최상위 폴더의 PowerShell에서 아래 명령을 실행합니다.
.\python_embeded\python.exe -m pip install -r ComfyUI\manager_requirements.txt
- 메모장에 아래 내용을 붙여 넣고 Portable 최상위 폴더에
run_nvidia_gpu_manager.bat로 저장합니다. 저장 대화상자의 파일 형식은 모든 파일로 고릅니다..bat.txt가 되지 않게 합니다. 기존 실행 파일은 그대로 보관합니다.
@echo off cd /d "%~dp0" .\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --enable-manager pause
- 새 실행 파일을 켜고 브라우저 화면을 새로고침합니다. 상단 확장 프로그램 관리를 누르면 커스텀 노드 관리자가 열립니다.
- 모든 확장 프로그램은 노드 팩 검색, 누락된 노드는 현재 작업에서 빠진 노드 확인에 사용합니다. 검색할 꾸러미 이름은
ComfyUI Impact Pack과ComfyUI Impact Subpack입니다. 이미 위 수동 경로로 설치했다면 같은 팩의 설치를 다시 누르지 않습니다.
이 버전에서는 수동으로 설치한 팩이 Manager의 설치됨 목록에 반영되지 않을 수 있습니다. 목록만 보고 삭제·재설치하기보다 A의 실제 노드 검색과 C의 실행을 먼저 확인하세요. 이 장은 Manager 창·검색 목록을 확인한 범위로 안내하며, Manager 설치 버튼의 성공 화면을 수동 설치 결과 대신 제시하지 않습니다.
4. 정상 결과 확인
| 볼 곳 | 정상 기준 |
|---|---|
| 추가 기능 | 얼굴 디테일러(FaceDetailer), UltralyticsDetectorProvider, BBOX Detector (combined)를 찾을 수 있습니다. |
| 모델 선택 | model_name 목록에서 bbox/face_yolov8m.pt를 선택할 수 있습니다. |
| 출력 이미지 | 입력과 같은 1024×1024이며, 얼굴이 있던 위치에 흰 사각형 한 개가 있습니다. 눈·코·입을 포함한 얼굴 주변을 감쌉니다. |
| 다음 작업으로 넘길 준비 | JSON·입력 PNG를 보관하고, 설치한 두 노드 팩과 모델 파일을 유지합니다. JSON만 복사하면 노드·모델이 함께 설치되는 것은 아닙니다. |
이 입력으로 실제 검출해 PNG를 저장했고, 제공 일반 JSON을 ComfyUI 화면에서 열어 실행해 같은 마스크가 표시되는 것까지 확인했습니다. 다른 이미지에서는 얼굴 수·위치에 따라 결과가 달라질 수 있습니다. 얼굴 위치를 찾은 것과 얼굴 보정 품질을 확인한 것은 다르므로, 이번 결과를 화질 개선의 전후 비교로 사용하지 않습니다.
5. 자주 생기는 문제
| 보이는 증상 | 원인 구별·해결 |
|---|---|
| JSON을 열자 노드가 없다고 나옴 | 코드가 없는 경우입니다. FaceDetailer 또는 BboxDetectorCombined_v2라면 Impact Pack, UltralyticsDetectorProvider라면 Impact Subpack을 확인합니다. 두 팩의 폴더 위치를 고치고 서버를 재시작합니다. |
| 모델 노드는 있지만 선택 목록이 비어 있음 | 노드 설치와 모델 준비는 별개입니다. face_yolov8m.pt를 ComfyUI/models/ultralytics/bbox에 두고 재시작합니다. checkpoints나 loras 폴더가 아닙니다. |
| 폴더는 있는데 노드가 검색되지 않음 | 압축 해제 폴더가 한 겹 더 들어갔는지 먼저 봅니다. __init__.py가 노드 팩 폴더 바로 안에 있어야 합니다. 이어 실행 창에서 IMPORT FAILED 또는 ModuleNotFoundError가 있는지 확인합니다. |
| ModuleNotFoundError / ImportError | 의존성 누락·불일치로 노드 코드를 읽지 못한 상태입니다. Portable의 python_embeded로 B의 명령을 실행했는지 확인합니다. 실패한 첫 오류와 지목한 라이브러리를 보고 해결하며, 모든 패키지를 한꺼번에 업그레이드하지 않습니다. |
| SAM2 functionality is unavailable | 이 최소 구성에서는 사용하지 않는 SAM2 기능 안내입니다. 이번 BBOX 검출은 SAM2가 없어도 실행합니다. 다른 ImportError나 검출 실패를 이 안내와 혼동하지 마세요. |
| 모델 노드의 SEGM 출력에 빨간 × | bbox 모델을 선택해 사용하지 않는 윤곽 분할 출력이 비활성인 정상 표시입니다. BBOX_DETECTOR 출력으로 연결했는지 확인합니다. |
| 검정 마스크만 저장됨 | 실행 완료와 얼굴 검출 성공은 다릅니다. 먼저 제공 원본·face 모델·threshold 0.50로 돌아갑니다. 다른 이미지의 작은 얼굴·옆얼굴·가려진 얼굴은 검출하지 못할 수 있습니다. 검정 결과를 보정 성공으로 쓰지 않습니다. |
| 흰 영역이 여러 개이거나 얼굴 밖을 선택함 | 여러 얼굴 검출 또는 오검출일 수 있습니다. 기본 원본과 설정으로 되돌려 비교하세요. threshold를 낮추면 더 좋아진다고 단정하지 않습니다. |
| Manager에는 미설치인데 실제 노드는 동작함 | 수동 설치가 관리자 목록에 반영되지 않은 경우일 수 있습니다. 작동하는 같은 팩을 중복 설치하지 말고 실제 노드 검색·워크플로 실행을 기준으로 판단합니다. |
| Python 경로를 찾지 못함 | PowerShell을 Portable 최상위 폴더에서 열었는지 봅니다. 그 안에 python_embeded와 ComfyUI가 함께 있어야 합니다. 시스템 Python용 pip로 바꿔 실행하지 않습니다. |
공식 참고 자료
준비 단계에서 PC 정보가 헷갈린다면 GPU·메모리 등 내 컴퓨터 사양 확인 방법을 함께 참고하세요. 이 장의 결과와 작업 JSON을 보관한 뒤 다음 실습으로 넘어가면 다시 비교하기 쉽습니다.