ComfyUI Backend Engine은 복잡한 노드 그래프(DAG)를 실행 가능한 API 포맷으로 직렬화하고, 역방향 의존성 추적을 통해 최적화된 상태로 머신러닝 워크플로우를 처리하는 핵심 실행 계층이다. [1-3]
🧠 핵심 개념 (Core concepts)
API JSON (Backend Format): UI 메타데이터(좌표, 크기 등)를 제거하고 노드 클래스(class_type)와 입력(inputs) 간의 논리적 연결만 포함된 정제된 실행 데이터 구조이다. [2, 4, 5]
Execution Model Inversion: 최종 출력 노드(예: Save Image)에서 시작하여 필요한 의존성만 역방향으로 탐색해 실행함으로써 불필요한 노드 연산을 배제하는 최적화 기법이다. [3]
Standalone Script Execution: 웹 서버와 UI 계층을 분리하여 워크플로우를 독립적인 Python 스크립트나 헤드리스(Headless) 파이프라인으로 구동하는 메커니즘이다. [6-8]
Dynamic Prompting: API 엔드포인트(/prompt)에 JSON 페이로드를 전송할 때 노드 ID나 타이틀을 기반으로 파라미터를 실시간으로 수정하여 동적 워크플로우를 생성한다. [9-11]
🧩 추출된 패턴 (Extracted patterns)
Serialization Bifurcation (직렬화 이원화): 시각적 편집을 위한 'Frontend 포맷'과 서버 실행을 위한 'Backend API 포맷'으로 워크플로우를 구분하여 관리한다. [2, 12]
Backward Dependency Traversal: 그래프 전체를 순차 실행하는 대신, 결과값 도출에 필수적인 노드들만 선별하여 실행 순서를 결정한다. [3]
Target Node Overriding: JSON 내부의 특정 노드 ID를 키값으로 활용하여 시드(Seed), 프롬프트, 모델 경로 등의 값을 프로그래밍 방식으로 교체한다. [10, 13, 14]
📖 세부 내용 (Details)
ComfyUI의 백엔드 엔진은 워크플로우를 **유향 비순환 그래프(DAG)**로 처리하며, 이를 직렬화(Serialization)하여 기기 간 이식성과 프로그래밍 자동화를 지원한다. [1] 워크플로우를 API로 실행하기 위해서는 표준 JSON 포맷이 아닌 'API 전용 포맷'이 필수적이며, 이는 ComfyUI 설정 메뉴에서 **"Dev mode Options"**를 활성화해야 내보내기가 가능하다. [15-17]
1. JSON 포맷의 구조적 차이
Frontend JSON (workflow.json):nodes 배열 안에 위치 정보(pos), 크기(size), 그룹 정보 등 UI 레이아웃 메타데이터가 포함된다. 연결은 별도의 links 배열에서 관리된다. [18-20]
API JSON (workflow_api.json): 노드 ID가 루트 키인 딕셔너리 구조이며, UI 관련 정보가 모두 제거된다. 링크 정보는 노드 입력값 내에 직접 참조(예: [node_id, output_slot]) 형태로 포함되어 훨씬 컴팩트하다. [4, 18, 21, 22]
2. 실행 및 최적화 메커니즘
백엔드 엔진은 /prompt 엔드포인트를 통해 수신된 JSON을 분석한다. [13, 18] 엔진의 Execution Model Inversion 아키텍처는 그래프에 수십 개의 노드가 있더라도 최종 결과 노드에 연결되지 않은 노드는 완전히 무시하여 자원을 최적화한다. [3] 또한, WorkflowExecutor와 ExecutionCache 같은 클래스를 활용하면 서버 환경 없이도 독립적인 Python 환경에서 워크플로우를 실행할 수 있다. [9, 23]
3. 프로그래밍적 확장성
개발자는 Python의 json 라이브러리를 사용하여 로드된 워크플로우 객체의 특정 노드 값을 변경한 뒤 API 서버로 전송할 수 있다. [13, 24] 이 과정에서 노드 ID가 고정되지 않아 발생하는 유지보수 문제는 Comfy API Simplified와 같은 래퍼 라이브러리를 사용하여 노드의 제목(Title)으로 접근함으로써 해결할 수 있다. [11, 25] 최근에는 LLM을 활용해 자연어를 이 API 형식의 JSON으로 변환해주는 ComfyUI-WorkflowGenerator 기술도 도입되고 있다. [26, 27]
⚖️ 모순 및 업데이트 (Contradictions & updates)
포맷 호환성 이슈: 표준 JSON 파일을 API 엔드포인트로 직접 보내면 에러가 발생하며, 반드시 API 포맷으로 변환해야 한다. [28]
API 포맷의 역변환 한계: API 포맷 JSON을 UI로 불러오면 노드의 시각적 정보(위치, 크기 등)가 누락되어 분석 및 편집이 어려운 '스켈레톤' 상태로 로드된다. [29]
버전 호환성: ComfyUI는 업데이트가 매우 빈번하여, 구버전 JSON이 최신 버전 백엔드에서 작동하지 않을 수 있으므로 주의가 필요하다. [30]
🛠️ 적용 사례 (Applied in summary)
comfyui-workflow-to-api-converter-endpoint: 클라이언트 측 JavaScript 로직을 Python으로 변환하여 서버사이드에서 non-API 포맷을 API 포맷으로 자동 변환해주는 엔드포인트(/workflow/convert)를 제공한다. [28, 31]
ComfyUI-to-Python-Extension: 워크플로우를 실행 가능한 .py 스크립트로 변환하여 헤드리스 환경에서 실행할 수 있게 한다. [7, 8]
WorkflowExecutor & ExecutionCache: 소스 코드 레벨에서 ComfyUI 워크플로우의 실행과 결과 캐싱을 관리하는 핵심 클래스 구현체이다. [9, 23]
P-Reinforce 관련: LLM 기반 자동 워크플로우 생성 파이프라인(Generator -> Validator -> Builder)에서 최종 실행 객체로 활용된다. [32, 33]