본문 바로가기
C.W.K.
Stream
Lesson 02 of 04 · published

Node Graph 가 치르는 값

~12 min · comfyui, node-graph, ux, modularity

Level 0툴 빌려 쓰는 사람
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"ComfyUI 가 어떤 모델이든 받아들이게 해 주는 그것이, 매일 쓰기 지치게 만드는 그것이랑 같은 거야."

천장이 없는 툴

monolith 의 문제가 박아 넣은 모양이라면, 답은 뻔해 보여. 박아 넣은 모양이 없는 툴을 쓰면 되지. 그런 툴은 실제로 있어. 모델 로드, 텍스트 인코딩, sampling, 디코딩 — 단계 하나하나가 네가 직접 이어 붙이는 노드인 node-graph 이미지 생성기 말이야. 새 모델 계열이 나왔다고? 노드 타입 하나 추가하면 끝. 내부가 워낙 잘게 쪼개져 있어서 박아 넣은 게 아무것도 없어. 천장이 사라진 거야.

유연함은 그래프가 아니라 그 밑에 있어

node-graph 툴이 어떤 모델이든 받아들일 수 있는 건 내부가 진짜로 쪼개져 있기 때문이야. VAE, text encoder, backbone, sampler, conditioning 이 저마다 깨끗한 인터페이스를 가진 독립된 단위로 있거든. node graph 는 그 쪼개짐을 눈에 보이게 그려 놓은 것뿐이야. 화면의 박스 하나가 그 모듈 하나고. Ember 가 훔쳐 온 게 바로 이 통찰이고, 다음 트랙 전체가 이 얘기야.

유연함은 UI 에 있는 게 아니라 그 UI 가 드러내 보이는 내부 구조에 있어. 쪼개진 내부는 가져가고 node-graph 화면은 버릴 수 있다는 뜻이야. 한 툴이 둘을 같이 내놓는다고 해서 둘이 같은 물건인 건 아니거든.

값: 그래프는 매일 쓸 화면이 아니야

여기서 맞바꿈이 생겨. node-graph 툴에서 이미지 하나 만들려면 그래프를 짜야 해. 아니면 불러와서 손보든가. 이 노드를 저 노드에 물리고, 파라미터를 여기 넣고, 저 선을 저기로 다시 잇고. 자기만의 작업 흐름을 만드는 고수한테는 이 통제권이 선물이야. 그런데 그냥 그림 그리다가 가끔 "이 부분만 다듬어 줘" 하고 싶은 사람한테는 만들 때마다 걸리는 턱이지. 유연함과 매일 치르는 값이 같은 기능에서 나와.

고수용 툴과 매일 쓰는 툴은 정반대를 다듬어. 고수용 툴은 동작 하나당 통제권을 최대로 키워. 매일 쓰는 툴은 하고 싶은 것 하나당 동작 수를 최소로 줄이고. 보통은 한 화면에서 둘 다 못 가져. 그래서 "그냥 유연한 툴 써" 가 공짜 답이 아닌 거야.

가짜 양자택일

그래서 이 판은 가짜 양자택일을 내밀어. 천장 낮은 단순한 툴이냐, 매일 쓰기 무거운 무제한 툴이냐. 대부분은 하나 골라서 단점을 안고 살아. forcing function 은 그럴 필요가 없다는 걸 깨닫는 데서 나와. 유연한 툴의 쪼개진 내부랑 편한 툴의 단순한 화면은 떼어 낼 수 있는 것들이고, 각각에서 하나씩 가져오는 걸 막는 건 아무것도 없거든.

Ember 가 양쪽에서 가져오는 것

Ember 의 설계는 대놓고 양쪽에서 훔쳐 온 거야. node-graph 툴한테서는 천장을 없애 주는 깊은 module 분리를 가져오고, 그 위에 monolith 처럼 단순한 recipe 기반 API 를 얹어. 대신 monolith 가 박아 놓은 모양은 빼고. 밖은 단순하고 안은 쪼개져 있어. node graph 는 원래 있던 연장통에 두고 오고.

아빠가 이걸 처음 설명했을 때 난 node graph 야말로 좋은 부분이라고 우기고 싶었어. 이거 봐, 얼마나 강력한데. 아빠는 그냥 내가 그 생각을 좀 붙들고 있게 놔뒀고, 그러다 알았어. 난 힘이랑 그 힘이 담긴 포장을 헷갈리고 있었던 거야. 힘은 쪼개짐에서 나와. 그래프는 그걸 다루는 여러 방식 중 하나일 뿐이고, 매일 그림 그리는 흐름에 얹고 싶은 방식은 아니었어. 엔진은 훔쳐 오되 조종간은 두고 오는 거지.

Code

같은 엔진, 조종 방식 둘·text
Node-graph 화면 (강력하지만 만들 때마다 배선 작업):

  [모델 로드] --> [CLIP 인코드] --+
                                  +--> [KSampler] --> [VAE 디코드] --> [저장]
  [Empty Latent] -----------------+
      ^                  ^
      |                  |
   w/h 설정         steps, cfg, sampler, scheduler, denoise, seed 설정...

Recipe 화면 (밑에 있는 내부는 똑같고, 호출은 하나):

  generate(prompt="...", model="...", steps=30)
      -> 엔진이 안에서 모듈을 알아서 엮음.
         너는 그래프를 한 번도 안 봐.

같은 모듈 엔진에 조종 방식만 둘. 쓰임새에 맞는 쪽을 골라 쓰면 돼.

External links

Exercise

힘은 부러운데 인터페이스가 매일 쓰기엔 무겁다고 느끼는 툴을 하나 대 봐. 노드 편집기든, config 를 코드로 쓰는 시스템이든, 플래그가 마흔 개인 CLI 든. 물어봐. 그 힘이 인터페이스 안에 있어, 아니면 인터페이스가 밖으로 꺼내 보여 줄 뿐이야? 같은 능력 위에 더 단순한 화면을 얹으면 어떤 모양일지 그려 봐.
Hint
같은 밑단 능력을 굴리는 한 줄짜리 호출을 떠올릴 수 있으면, 그 힘은 애초에 인터페이스에서 떼어 낼 수 있었던 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.