8화 2026-05-30

보라색 우주 병이 태어난 날

— 노드 하나하나에 의미가 있다

지난 편에서 ComfyUI를 돌릴 작업실(venv + 본체)을 만들었어요. 이제 진짜로 그림을 만들어봅니다.

오늘 글은 두 부분이에요. 앞부분은 “그래서 ComfyUI는 어떻게 생긴 도구인가” - 첫 화면을 만났을 때의 당혹스러움이랑, 그걸 해석해 나간 과정. 뒷부분은 “그래서 어떻게 만드는가” - 노드 하나하나의 의미와 첫 작품이 태어난 순간.


첫 화면 - 노드들이 너무 많다

ComfyUI를 켜고 브라우저로 http://localhost:8188 에 접속하니까, 검은 격자 화면에 박스 7개가 줄로 연결돼 있는 그림이 떴어요.

처음 본 인상은 솔직히… “이거 어떻게 읽는 거지?” 였어요.

각 박스에는 영어로 뭔가 적혀 있고, 화살표가 사방으로 뻗어 있고, 슬라이더랑 드롭다운이 막 박혀 있고. 한 번도 안 본 사람이 보면 회로도처럼 보입니다.

그런데 자세히 보니까 익숙한 느낌이 들었어요. Make (예전 Integromat)이나 n8n 같은 업무 자동화 도구 써본 분이라면 패턴이 똑같아요. “데이터가 박스 사이를 줄 따라 흐르면서 변형돼서 결과물이 나오는 그림.”

비유로 풀면 이래요. ComfyUI는 공장 라인 도면입니다.

공장 라인은 재료 투입 → 가공 → 마무리 → 출고 순서로 흐르잖아요. ComfyUI 워크플로우도 똑같아요.


3단계 공장 구조

기본 워크플로우 박스 7개를, 색깔로 묶어서 다시 보면 이런 구조예요.

[ 회색 4개: 재료 준비 ]    [ 노란색 1개: 가공 ]    [ 청록색 2개: 마무리 ]

  Load Checkpoint  ──┐
  긍정 프롬프트    ──┤
  부정 프롬프트    ──┼──→  KSampler  ──→  VAE Decode  ──→  이미지 저장
  빈 캔버스        ──┘     (그리는 뇌)    (잠재→이미지)     (파일 저장)

회색 4개: 재료 준비

1. Load Checkpoint - 본인이 다운로드한 모델 본체를 메모리에 올리는 단계예요. 6편의 Ollama가 채팅 모델을 로드하던 거랑 같은 일을 이미지 모델에 대해 하는 거예요. 첫 실행이 5~10초 멈춰 보이는 이유가 여기예요.

2. 긍정 프롬프트 (Positive Prompt) - “이런 그림 그려줘” 라고 텍스트로 적는 칸. 예: beautiful scenery, glass bottle, purple galaxy. 영어로 쓰는 게 모델이 더 잘 이해해요.

3. 부정 프롬프트 (Negative Prompt) - “이런 건 피해줘”. 예: blurry, low quality, watermark. 의외로 진짜 중요해요. 그림 품질의 절반은 이 칸이 결정합니다.

4. 빈 캔버스 (Empty Latent Image) - 그릴 빈 공간 준비. 여기서 이미지 사이즈가 정해져요 (512×512, 1024×1024 등). 모델마다 권장 사이즈가 있어요. SD 1.5는 512×512가 기본, SDXL은 1024×1024가 기본.

노란색 1개: KSampler (실제 그리는 곳)

KSampler - 진짜로 그림을 만드는 곳이에요. 회색 박스 4개의 입력을 다 받아서, 노이즈 덩어리에서 시작해서 한 단계씩 노이즈를 걷어내며 그림을 완성합니다.

여기서 흥미로운 게 있어요. AI가 그림 그리는 원리가 사실 좀 거꾸로예요.

흰 캔버스에 점점 그림을 그려가는 게 아니라, 노이즈로 가득한 화면에서 노이즈를 점점 걷어내며 그림을 드러내는 방식이에요.

비유: 안개 낀 풍경에서 안개가 점점 걷히면서 풍경이 보이는 거랑 비슷해요. 처음엔 완전 안개(노이즈)뿐인데, AI가 텍스트 프롬프트를 보면서 “여긴 산, 여긴 강, 여긴 나무”를 안개 속에서 점점 골라내는 식. 이걸 확산 모델(Diffusion Model) 이라고 부르는 이유예요. 노이즈로 “확산”된 걸 거꾸로 풀어가는 거.

KSampler의 옵션들은 이렇습니다.

청록색 2개: 마무리

1. VAE Decode - 여기서 한 가지 트릭이 있어요. KSampler가 만든 결과는 사람이 못 보는 압축된 데이터(잠재 공간, latent space) 예요. VAE라는 별도 모델이 그걸 풀어서 우리가 보는 RGB 이미지로 변환해줍니다.

왜 굳이 압축 공간에서 작업하냐? 풀 사이즈 RGB로 노이즈 걷어내기 작업하면 메모리랑 시간이 미친 듯이 들어요. 압축 공간에선 같은 작업이 훨씬 빨라요. AI가 그림 그리는 효율의 비밀 중 하나가 이 압축 단계예요.

2. 이미지 저장 - 자동으로 ComfyUI/output/ 폴더에 PNG로 저장. 별도로 다운로드 안 해도 됨. 디스크에 영구 보관됩니다.


그래서, 보라색 우주 병이 태어났다

실행 버튼을 한 번 눌렀어요.

처음 5초 정도 정적이 흘렀어요 (모델 메모리 로드, 위에서 본 그거). 그 다음 KSampler 박스 위에 진행 막대가 흐르기 시작했어요. 1/20, 2/20, 3/20… 노이즈가 점점 걷히는 과정.

기본 프롬프트가 들어있었어요:

긍정: beautiful scenery nature glass bottle landscape, purple galaxy bottle
부정: text, watermark

20스텝이 다 차고, VAE Decode가 잠시 돌고, 마지막에 이미지 저장 박스에 그림이 짠 떴어요.

잔디밭 같은 배경에 보라색 우주가 안에 든 유리병이 서 있는 그림. 빛 반사도 자연스럽고, 풀이 살짝 흔들리는 느낌도 있어요. SD 1.5라는 옛날 모델치고는 꽤 그럴듯합니다.

이 그림이 만들어지기까지 본인이 한 일을 다시 한 번 정리해보면:

  1. ATOM 부팅 + ComfyUI 서버 실행
  2. 브라우저로 localhost:8188 접속
  3. 템플릿 하나 골라 워크플로우 로드
  4. 실행 버튼 클릭

그게 다예요. 모델 학습 안 했고, 네트워크에 데이터 안 보냈고, 어떤 회사에도 비용 안 냈어요. 본인 책상 위에서, 인터넷 없이도, 무제한으로 만들 수 있어요.

이게 처음으로 손에 잡힌 순간이었어요. 2편 때 jupyterlab에서 코드로 만든 보라색 그림이랑 결과는 비슷한데, 만든 과정이 완전히 달랐어요. 이제 본인이 일상적으로 쓸 수 있는 도구가 된 거예요.

123.webp

노드 한 개 더 - LoRA로 능력 추가하기

기본 워크플로우만 알아도 이미지 생성은 충분해요. 그런데 ComfyUI를 진짜 강력하게 만드는 게 하나 더 있어요. LoRA.

LoRA는 Low-Rank Adaptation의 줄임말이에요. 우리말로 “저차원 적응”. 이름은 어렵지만 개념은 의외로 단순해요.

거대한 본 모델은 그대로 두고, 작은 부가 파일로 능력이나 스타일을 추가하는 기술.

비유로 풀면 인스타 필터예요.

원본 사진                    = 본 모델 (수 GB, 무거움)
       +
필터 (빈티지/흑백/...)  = LoRA (수십 ~ 수백 MB, 가벼움)

변환된 사진                  = 결과물

게임으로 비유하면 DLC(확장팩). 본 게임은 그대로, DLC가 새 캐릭터·맵·능력을 추가하는 그것.

LoRA 다섯 종류

LoRA 생태계엔 대충 5가지 종류가 있어요.

종류하는 일예시
🎨 스타일그림체 변경픽사 스타일, 애니, 픽셀아트, 수채화
🧑 캐릭터특정 인물 생성영화 캐릭터, 본인 얼굴
💡 개념·능력새 기능 추가멀티앵글, 특정 자세, 손가락 정확도
속도적은 스텝으로 빠르게Lightning, Turbo (4스텝에 끝남)
품질디테일·품질 향상Detail Tweaker

LoRA 파일은 ComfyUI/models/loras/ 폴더에 넣으면 자동 인식돼요. 그리고 워크플로우에 Load LoRA 노드를 끼우면 끝.

Load Checkpoint → Load LoRA → KSampler → ...

                            본인이 받은 LoRA 파일
                                          +
                           강도 조절 (보통 0.7~1.0)

가장 큰 동산은 Civitai.com 이에요. 수만 개의 LoRA가 미리보기 이미지랑 함께 올라와 있어요. 본 모델에 맞는 거 골라야 하는 게 함정인데, 같은 본 모델(예: SD 1.5)용 LoRA끼리만 호환돼요. SD 1.5 LoRA를 SDXL에 쓰면 작동 안 함. 다운로드 페이지에 “Base Model: SD 1.5” 같은 표시가 있으니 확인하면 됩니다.

더 깊은 의미 - 직접 학습도 가능

LoRA가 진짜 멋진 건, 본인도 만들 수 있다는 거예요.

예를 들어 본인 강아지 사진 20~30장으로 학습시키면, “내 강아지의 픽사 스타일 그림”을 무한 생성하는 LoRA가 만들어져요. 학습 시간 본인 ATOM에서 30분~2시간 정도. 결과물 파일 크기 200~500MB.

3편에서 봤죠. AI 업계가 점점 작은 정밀도로 가는 거. 그리고 양자화 라이브러리(bitsandbytes)가 ATOM에 미리 깔려 있던 거. 그게 다 본인이 이런 걸 할 수 있게 준비된 거예요. ATOM은 단지 모델을 굴리는 컴퓨터가 아니라, 본인만의 모델을 만들 수 있는 컴퓨터입니다.

이건 다음에 진짜로 해볼 거예요.


한 가지 더 - 폰에서도 보이는 그림

6편에서 본인이 Open WebUI를 폰에서 접속하게 만들었죠. ComfyUI도 똑같이 됩니다.

서버 켤 때 --listen 0.0.0.0 옵션 한 줄만 추가하면 돼요.

python main.py --listen 0.0.0.0

이 옵션이 뭐냐면, 누구의 접속을 받을지 지정하는 거예요.

그러면 폰 브라우저에서 http://[ATOM의 Tailscale IP]:8188 로 접속하면 ComfyUI 화면이 떠요. 노드 화면이 좁아서 조작은 좀 답답하지만, 누워서 실행 버튼 누르고 침대에서 결과 보는 게 가능해요.

이게 6편 + 7편 + 8편의 종합 결실이에요. Tailscale 깔고, Docker로 텍스트 AI 만들고, venv로 이미지 AI 만들고. 그게 다 합쳐져서 언제 어디서든 본인 책상 위의 AI를 호출할 수 있는 상태가 된 거예요.


오늘의 정리

가장 큰 성취 하나를 고른다면 - 본인 책상 위에서 이미지 한 장이 태어났다. ChatGPT 같은 서비스 안 거치고, 외부 서버에 비용 안 내고, 의뢰인 자료를 다뤄도 마음 편한 그 한 칸.

다음 편엔 이 ComfyUI 안에서 만난 또 다른 발견을 적어볼 거예요. “카카오는 이걸 다 자체 개발하는 건가?” 라는 의심에서 시작해서, 결국 본인이 AI 회사 생태계를 보는 시각이 한 단계 올라간 이야기.

읽어주셔서 감사합니다. 🙂

#환경구축#문제해결기#이미지생성