AI IMAGE · BATCH

ComfyUI 여러 장 뽑기 — batch_size와 배치 수, 대기열

junetapa 약 17분

그림 한 장을 뽑는 데까지는 익숙해졌는데 여러 장을 한꺼번에 뽑으려고 보면 손댈 곳이 두 군데다. Empty Latent Image 노드의 batch_size 칸, 그리고 실행 버튼 바로 왼쪽의 작은 숫자 칸(배치 수)이다. 둘 다 올리면 그림이 여러 장 나오지만 하는 일은 전혀 다르다. 하나는 그래픽카드 메모리를 한 번에 더 쓰고, 다른 하나는 시간을 더 쓴다. 이 글은 2026년 10월 15일에 ComfyUI 본체 저장소(nodes.py · folder_paths.py · execution.py · main.py · server.py · comfy/samplers.py · comfy/sd.py)와 프런트엔드 저장소(app.ts · BatchCountEdit.vue · ComfyQueueButton.vue · autoQueueService.ts · useCoreCommands.ts)의 소스 코드를 직접 내려받아 대조했다. 두 칸이 코드에서 어떻게 움직이는지, 대기열에 쌓인 작업을 앞당기거나 멈추거나 비우는 법, 실행 버튼의 세 모드를 차례로 적는다.

이어 읽기

배치 안 몇 번째 그림의 시드가 어떻게 정해지는지와 그 한 장만 다시 뽑는 batch_index 경로는 시드 고정과 CFG 편에 있다. 모델별로 그래픽카드 메모리가 얼마나 드는지는 모델별 VRAM, 뽑은 PNG로 워크플로를 되살리는 법은 워크플로 불러오기 편을 본다. ComfyUI가 처음이라면 ComfyUI 입문 실전 가이드부터 읽는다.

여러 장을 만드는 칸은 두 곳

먼저 두 칸을 한 표에 놓는다.

구분batch_size배치 수(Batch Count)
자리Empty Latent Image 노드실행 버튼 왼쪽 숫자 칸
범위1~4096, 기본 11~설정 상한, 기본 상한 100
만드는 것작업 하나 안의 잠재 이미지 여러 장같은 워크플로의 작업 여러 개
시드작업 하나에 하나작업마다 시드 칸 제어가 한 번씩 돈다
그래픽카드 메모리장 수만큼 한 번에 쓴다한 작업 분량
실패하면그 작업의 그림 전부가 없다실패한 작업 몫만 없다(넣는 단계에서 거절되면 남은 반복도 멈춤)

공식 문서는 batch_size를 «한 배치에서 만들 잠재 이미지의 수»로 설명하고, 여러 잠재 표현을 동시에 만들어 일괄 처리하게 해 준다고 적었다. 프런트엔드의 한국어 화면은 실행 버튼 옆 칸을 «배치 수»라고 부르고, 설명 문구를 «워크플로 작업을 실행 대기열에 반복 추가할 횟수»로 달았다. 이름은 비슷하지만 한쪽은 노드의 입력값이고, 다른 쪽은 버튼을 한 번 누를 때 실행 요청을 몇 번 보낼지 정하는 화면 설정이다.

두 칸은 함께 쓸 수 있다. batch_size 2에 배치 수 3을 두면 그림 두 장짜리 작업이 셋 생기므로 모두 여섯 장, 시드는 셋이다. 장 수는 늘 두 값을 곱한 만큼이다.

batch_size 4와 배치 수 4가 넉 장을 만드는 방식의 차이 — batch_size는 작업 하나에 시드 하나로 잠재 이미지 넉 장을 한 덩어리로 샘플링하고, 배치 수는 작업 넷을 대기열에 차례로 넣으며 넣을 때마다 시드 칸 제어가 돈다. 시드가 고정 값이면 넉 작업이 똑같아 첫 작업만 실제로 그린다
넉 장을 뽑는 두 가지 길 — 한 덩어리로, 또는 차례로.

batch_size — 한 작업 안에서 한꺼번에

Empty Latent Image 노드의 코드는 짧다. 폭 · 높이 · batch_size를 받아 [batch_size, 4, 높이 ÷ 8, 폭 ÷ 8] 모양의 0으로 채운 텐서를 만든다. 공식 개발 문서도 LATENT 텐서의 모양을 [B,C,H,W]로 적는데, 맨 앞의 B가 batch_size다. 이 한 덩어리가 KSampler로 넘어가 잡음이 입혀지고 함께 걷힌다.

시드도 이 덩어리에 하나만 쓰인다. KSampler가 시드로 난수 생성기를 한 번 맞춘 뒤 배치 전체 크기의 잡음을 한꺼번에 뽑기 때문에, 배치 셋째 그림은 «시드 + 2»로 다시 만들어지지 않는다. 이 부분은 시드 편의 «배치 n번째 그림만 다시 뽑기» 절에 코드와 함께 정리했으니 여기서는 결론만 가져온다. 배치 가운데 한 장이 마음에 들면 PNG를 끌어다 놓아 같은 설정을 되살리고, 그 순번을 Latent From Batch로 꺼내거나 같은 배치를 통째로 다시 돌린다.

메모리가 늘어나는 자리

batch_size를 올리면 그래픽카드 메모리 사용량이 함께 오른다. 코드에서 그 자리를 두 곳 확인할 수 있다.

첫째는 샘플링이다. comfy/samplers.py의 _calc_cond_batch는 단계마다 모델을 부를 때 남은 메모리를 보고, 필요한 메모리의 1.5배가 남은 메모리보다 작으면 긍정 조건과 부정 조건을 하나로 묶어 한 번에 계산한다. 이때 묶음 하나의 입력 크기는 잠재 배치 전체 단위로 잡힌다. 메모리를 보고 나누는 단위가 «조건»이지 «배치 안의 그림»이 아니라는 뜻이다. 그래서 batch_size를 크게 잡으면 이 단계에서는 배치 전체를 한 번에 올려야 한다.

둘째는 잠재 이미지를 그림으로 푸는 VAE Decode다. comfy/sd.py의 decode는 한 장을 푸는 데 드는 메모리를 어림하고, 남은 메모리로 한 번에 몇 장을 풀지 계산해 배치를 나눠 푼다. 그래도 메모리가 모자라 오류가 나면 «Warning: Ran out of memory when regular VAE decoding, retrying with tiled VAE decoding.»이라는 경고를 남기고 타일 디코딩으로 다시 시도한다. 명령 창에 이 줄이 보이면 그림은 나오지만 이 단계에서 메모리가 빠듯했다는 신호다.

정리하면 디코드 단계는 스스로 나눠 주지만 샘플링 단계는 배치 덩어리를 그대로 다룬다. 어느 batch_size부터 메모리가 넘치는지는 모델 · 해상도 · 그래픽카드마다 달라서 이 글에서 숫자로 적지 않는다. batch_size를 하나씩 올려 보며 명령 창에 메모리 부족 오류가 뜨기 전 값을 찾고, 모델별 대략의 메모리는 모델별 VRAM 편을 본다.

파일 이름과 PNG 속 정보

Save Image는 배치의 그림을 하나씩 돌며 PNG로 저장한다. 파일 이름은 «접두사_번호_.png» 꼴이고, 번호는 다섯 자리로 채워지며 그림 한 장마다 1씩 오른다. 시작 번호는 output 폴더 안에서 같은 접두사를 쓴 파일의 가장 큰 번호에 1을 더한 값이다. 기본 접두사 ComfyUI로 넉 장짜리 배치를 처음 저장하면 ComfyUI_00001_.png부터 ComfyUI_00004_.png까지 생기고, 다음 작업은 00005부터 이어진다.

배치 안의 그림 넉 장에는 같은 실행 요청(prompt)이 메타데이터로 적힌다. 넉 장 모두 같은 시드가 적혀 있는 셈이다. 파일만 보고 «이 그림은 배치의 몇 번째였나»를 알아야 한다면 접두사에 %batch_num%을 넣는다. Save Image는 이 글자를 배치 안 순번(0부터)으로 바꿔 넣는다.

배치 수 — 같은 작업을 대기열에 여러 번

실행 버튼 왼쪽의 숫자 칸은 프런트엔드 코드에서 BatchCountEdit라는 부품이다. 최솟값은 1이고, 위 화살표를 누르면 지금 값의 두 배, 아래 화살표를 누르면 절반(소수점 버림)이 된다. 1 · 2 · 4 · 8처럼 건너뛰므로 3이나 5를 넣으려면 칸을 눌러 숫자를 직접 친다. 숫자가 아닌 글자는 지워지고, 칸을 벗어나는 순간 1과 상한 사이로 잘린다. 상한은 설정의 «배치 수 제한»(Comfy.QueueButton.BatchCountLimit)이 정하며 기본값은 100이다. 한 번에 더 많이 넣어야 하면 이 설정을 올린다.

실행 버튼을 누르면 프런트엔드의 queuePrompt가 배치 수만큼 반복한다. 반복 한 번마다 워크플로를 실행 요청으로 바꿔 서버의 /prompt로 따로 보낸다. 서버는 받은 요청마다 작업 id를 새로 붙여 대기열에 넣는다. 서버 쪽 작업자는 대기열에서 한 번에 한 작업씩 꺼내 실행하고, 끝나면 다음 작업을 꺼낸다. 넉 작업이 그래픽카드를 동시에 나눠 쓰는 일은 없으므로 메모리는 한 작업 분량이면 된다. 대신 시간은 작업 수만큼 쌓인다.

반복 도중 서버가 요청을 거절하면(검증 오류 등) 프런트엔드는 남은 반복을 멈춘다. 배치 수를 50으로 두었는데 작업이 하나만 들어갔다면 오류 표시부터 본다. 오류 문구를 읽는 법은 오류 메시지 읽는 법 편에 있다.

넣을 때마다 시드 칸이 돈다

배치 수의 반복에서 중요한 줄은 두 곳이다. 요청을 만들기 직전에 모든 위젯의 beforeQueued 콜백을, 요청이 들어간 직후에 afterQueued 콜백을 부른다. 시드 칸 아래의 control after generate가 바로 이 콜백으로 값을 바꾼다. 기본 설정(위젯 제어 모드 after)에서는 작업 하나를 넣은 직후 시드 칸이 바뀌고, 다음 반복은 바뀐 시드로 요청을 만든다.

그래서 같은 배치 수 4라도 control after generate 값에 따라 결과가 갈린다.

control after generate넉 작업의 시드결과
값 무작위화(randomize)매번 새 무작위 값서로 다른 넉 장
값 증가(increment)S · S+1 · S+2 · S+3서로 다른 넉 장, 시드를 거꾸로 세기 쉬움
고정 값(fixed)S · S · S · S실제로 그리는 것은 첫 작업뿐

마지막 줄이 가장 많이 헷갈리는 곳이다. 이유는 다음 소제목의 캐시에 있다.

시드를 고정한 채 배치 수를 올리면

시드가 고정 값이면 배치 수만큼 넣은 작업이 글자 하나까지 같다. ComfyUI는 바뀐 것이 없는 작업을 다시 계산하지 않으므로, 대기열에는 작업이 넷 들어가도 새 그림 파일은 첫 작업 몫만 생긴다. 여러 장을 보려면 control after generate를 값 무작위화나 값 증가로 바꾼다. 시드를 고정하고 CFG 같은 칸만 바꿔 견주는 일은 배치 수가 아니라 칸을 바꿔 가며 한 번씩 실행하는 일이다.

바뀌지 않은 노드는 다시 돌지 않는다

README는 같은 그래프를 두 번 넣으면 첫 번째만 실행되고, 그래프의 마지막 부분을 바꾸면 바꾼 부분과 거기에 기대는 부분만 실행된다고 적었다. 실행 코드도 그렇게 짜여 있다. execution.py의 execute는 노드를 돌리기 전에 캐시를 먼저 보고, 결과가 있으면 다시 계산하지 않고 저장된 결과를 내보낸 뒤 넘어간다. 시작할 때 따로 옵션을 주지 않으면 이 캐시는 RAM 압력 캐시 방식으로 켜진다.

이 구조는 배치 수를 쓸 때 득이 된다. 시드가 바뀌는 작업이 연달아 들어오면 체크포인트 불러오기 · 프롬프트 인코딩 · Empty Latent Image처럼 입력이 그대로인 노드는 첫 작업 뒤로 캐시에서 꺼내 쓰고, 시드가 바뀐 KSampler와 그 뒤의 VAE Decode · Save Image만 다시 돈다. 첫 작업이 모델을 불러오느라 오래 걸리고 다음 작업부터 짧아지는 것은 이 때문이다. 반대로 시작 옵션 --cache-none을 주면 메모리를 덜 쓰는 대신 실행마다 모든 노드를 다시 실행한다.

둘 중 무엇을 올리나

두 칸의 성질을 놓고 보면 고르는 순서가 나온다.

  1. 처음 쓰는 모델 · 해상도라면 batch_size는 그대로 두고 배치 수로 장 수를 늘린다. 메모리는 한 작업 분량만 쓰고, 그림마다 시드가 따로 PNG에 남는다. 마음에 든 한 장을 끌어다 놓으면 그 시드가 그대로 돌아온다.
  2. 메모리에 여유가 있으면 batch_size를 조금씩 올려 본다. 공식 문서가 말하는 «동시에 만드는 일괄 처리»다. 다만 같은 장 수에서 batch_size가 배치 수보다 얼마나 빠른지는 그래픽카드 · 모델에 따라 달라 이 글에서 재지 않았다. 직접 비교하려면 같은 장 수를 두 방식으로 한 번씩 돌려 명령 창의 «Prompt executed in … seconds» 줄을 견준다.
  3. 메모리 부족 오류가 나면 batch_size부터 내린다. 샘플링 단계는 배치 덩어리를 나눠 주지 않으므로, 같은 장 수를 원하면 batch_size를 줄이고 그만큼 배치 수를 올린다.
  4. 배치 가운데 한 장을 손볼 생각이라면 배치 수 쪽이 편하다. 그림마다 시드가 따로 있어 PNG 한 장으로 바로 재현된다. batch_size로 뽑은 그림은 batch_index 경로를 거쳐야 한다.

어느 쪽이든 장 수 = batch_size × 배치 수라는 셈은 같다. 큰 숫자를 넣기 전에 한 장짜리로 먼저 돌려 오류 없이 끝나는지 보면 대기열에 실패 작업이 줄줄이 쌓이는 일을 막을 수 있다.

실행 대기열 다루기 — 앞당기기 · 멈추기 · 비우기

배치 수를 크게 넣고 나면 대기열에는 작업이 길게 늘어선다. 이 줄을 다루는 동작은 셋이고, 각자 건드리는 자리가 다르다.

실행 대기열의 세 동작이 건드리는 자리 — 맨 앞에 넣기는 새 작업을 대기 중인 작업들 앞에 세우고 실행 중인 작업은 멈추지 않으며, 현재 실행 취소는 실행 중인 작업만 멈추고 대기 작업은 이어서 실행되며, 보류 중인 작업 지우기는 대기 작업만 비우고 실행 중인 작업은 끝까지 간다
맨 앞에 넣기 · 현재 실행 취소 · 보류 작업 지우기는 서로 다른 자리를 건드린다.

맨 앞에 넣기

대기열이 길게 차 있는데 급히 한 장을 먼저 보고 싶을 때 쓴다. Shift를 누른 채 실행 버튼을 누르거나 Ctrl+Shift+Enter를 누르면 «실행 큐 맨 앞에 프롬프트 추가» 명령이 불린다. 한국어 화면의 실행 버튼 설명에도 «시프트 키와 함께 클릭시 가장 먼저 실행»이라고 적혀 있다.

서버에서 일어나는 일은 번호 매기기다. /prompt는 요청마다 번호를 하나씩 올려 붙이는데, 맨 앞 요청이면 그 번호를 음수로 바꾼다. 대기열은 번호가 작은 작업부터 꺼내는 우선순위 큐라서 음수 번호를 받은 작업이 다음 차례가 된다. 이미 그리고 있는 작업을 밀어내지는 않는다. 지금 작업이 끝나면 맨 앞 작업이 실행되고, 그 뒤로 원래 줄이 이어진다. 맨 앞으로 넣을 때도 배치 수가 그대로 적용되므로, 한 장만 앞당기려면 배치 수를 1로 내리고 누른다.

현재 실행 취소

Ctrl+Alt+Enter(명령 이름 «중단», 한국어 메뉴 «현재 실행 취소»)는 지금 그리고 있는 작업 하나만 멈춘다. 프런트엔드는 실행 중인 작업의 id를 /interrupt로 보내고, 서버는 그 id가 실제로 실행 중일 때만 멈춤 신호를 보낸다. 대기 중인 작업은 건드리지 않으므로 하나를 멈추면 다음 작업이 곧바로 시작된다. 배치 수 50을 잘못 넣고 이 키만 누르면 작업이 하나씩 넘어갈 뿐 줄은 줄지 않는다.

보류 중인 작업 지우기

기다리는 작업을 한꺼번에 비우는 명령은 «보류 중인 작업 지우기»(Clear Pending Tasks)다. 서버의 /queue에 clear를 보내고, 서버는 대기 목록만 비운다. 실행 중인 작업은 별도 목록에 있으므로 끝까지 간다. 그래서 «다 멈추기»는 두 단계다. 보류 중인 작업 지우기로 줄을 비운 다음 현재 실행 취소로 지금 작업을 멈춘다. 순서를 거꾸로 하면 지금 작업을 멈춘 사이 다음 작업이 시작될 수 있다.

작업 하나만 골라 빼고 싶으면 작업 기록 · 대기열 패널에서 그 작업의 취소 단추를 쓴다. 프런트엔드는 실행 중이거나 대기 중인 작업 모두에 취소 동작을 달아 두었고, 서버도 /queue의 delete로 작업 id 하나를 지정해 빼는 길을 열어 두었다.

실행 버튼의 세 모드 — 실행 · 변경 시 · 즉시

실행 버튼 오른쪽의 작은 화살표를 누르면 «실행 옵션» 메뉴가 열리고, 실행 · 실행 (변경 시) · 실행 (즉시) 가운데 하나를 고른다. 처음 상태는 «실행», 버튼을 누를 때만 넣는 모드다. 즉시 모드는 클라우드판에서는 메뉴에 나오지 않는다.

모드한국어 설명 문구코드에서 넣는 때
실행자동으로 대기열에 추가하지 않음버튼 · 단축키를 누를 때만
실행 (변경 시)변경이 있는 경우에만 추가그래프가 바뀌면 넣고, 대기 작업이 있으면 그 작업이 다 끝난 뒤 한 번 더 넣음
실행 (즉시)실행이 완료되면 즉시 추가대기 작업 수가 0이 되고 마지막 실행에 오류가 없으면 다시 넣음

두 자동 모드 모두 다시 넣을 때 배치 수 칸의 값을 그대로 쓴다. 즉시 모드에 배치 수 4를 두면 넉 작업이 끝날 때마다 넉 작업이 다시 들어간다. 즉시 모드를 켜고 실행을 누르면 버튼 글자가 «즉시 실행 중지»로 바뀌고, 다시 누르면 새 작업을 넣지 않는 대기 상태로 돌아간다. 이미 들어간 작업까지 지우지는 않으므로 바로 멈추려면 앞 절의 두 단계를 함께 쓴다.

즉시 모드는 시드가 값 무작위화일 때 «멈출 때까지 계속 뽑기»가 된다. 변경 시 모드는 프롬프트 한 단어 · CFG 한 칸을 바꿀 때마다 결과를 바로 보고 싶을 때 맞는다. 이때 앞의 캐시 덕분에 바꾼 칸 뒤쪽만 다시 돈다. 마지막 실행이 오류로 끝나면 즉시 모드는 다시 넣지 않으므로, 오류를 고친 뒤에는 실행을 한 번 눌러 다시 굴린다.

많이 뽑을 때 정리해 둘 것

여러 장을 뽑기 시작하면 output 폴더가 금방 찬다. 손댈 만한 곳을 모았다.

  • 접두사로 폴더를 나눈다. Save Image의 filename_prefix에 cats/ComfyUI처럼 슬래시를 넣으면 output 아래 cats 폴더에 저장된다. output 폴더 밖을 가리키면 저장을 막고 오류를 낸다.
  • 날짜 · 크기를 이름에 넣는다. 서버 코드는 접두사의 %year% · %month% · %day% · %hour% · %minute% · %second% · %width% · %height%를 실제 값으로 바꾼다. Save Image의 설명 문구는 %date:yyyy-MM-dd%나 %Empty Latent Image.width%처럼 다른 노드의 값을 넣는 형식도 쓸 수 있다고 안내한다.
  • 시험 삼아 뽑을 때는 Preview Image를 쓴다. Preview Image는 Save Image와 같은 코드를 쓰되 output이 아니라 임시(temp) 폴더에 저장한다. 설정을 찾는 동안에는 미리 보기로 돌리고, 정해지면 Save Image로 바꾼다.
  • 기록 목록 길이를 맞춘다. 화면의 작업 기록에 보이는 개수는 설정 «실행 큐 기록 갯수»(기본 64, 2~256)로 정한다. 서버는 이와 별도로 기록을 최대 10000개까지 들고 있다.

PNG 한 장마다 워크플로와 실행 요청이 함께 저장되므로, 대량으로 뽑은 그림 가운데 하나를 골라 화면에 끌어다 놓으면 그 그림을 만든 설정이 되살아난다. 그 뒤 손보는 순서는 워크플로 불러오기와 시드 고정과 CFG 편으로 이어진다. 같은 일을 파이썬 스크립트로 돌리고 싶다면 ComfyUI 저장소의 script_examples 폴더가 출발점이며, 이 시리즈에서 따로 다룰 예정이다.

자주 묻는 것

batch_size와 배치 수(Batch Count)는 무엇이 다른가요?

batch_size는 Empty Latent Image 노드의 입력값으로, 작업 하나 안에서 잠재 이미지 여러 장을 한 덩어리로 그립니다. 시드는 하나이고 그래픽카드 메모리를 장 수만큼 한 번에 씁니다. 배치 수는 실행 버튼 왼쪽 칸으로, 같은 워크플로를 대기열에 그 횟수만큼 따로 넣습니다. 작업마다 시드 칸 제어가 한 번씩 돌고, 서버는 한 작업씩 차례로 실행합니다. 두 값을 곱한 만큼 그림이 나옵니다.

배치 수를 4로 올렸는데 그림이 한 장만 생겼어요.

시드 칸 아래 control after generate가 고정 값인지 봅니다. 고정 값이면 넉 작업이 완전히 같아서, 바뀐 것이 없는 작업은 다시 계산하지 않는 ComfyUI의 캐시 때문에 첫 작업만 실제로 그림을 그립니다. 값 무작위화나 값 증가로 바꾸면 작업마다 시드가 달라져 넉 장이 나옵니다. 반복 도중 서버가 요청을 거절하면 남은 반복이 멈추므로 오류 표시도 함께 확인합니다.

batch_size를 올렸더니 메모리 부족 오류가 납니다.

batch_size를 내리고 그만큼 배치 수를 올립니다. 그림을 푸는 VAE Decode는 남은 메모리를 보고 배치를 나눠 풀거나 타일 방식으로 다시 시도하지만, 샘플링 단계는 배치 덩어리를 통째로 다룹니다. 배치 수로 넣은 작업은 한 번에 하나씩 실행되므로 메모리는 한 작업 분량이면 됩니다.

대기열에 잘못 넣은 작업을 한꺼번에 멈추려면 어떻게 하나요?

먼저 보류 중인 작업 지우기(Clear Pending Tasks)로 기다리는 작업을 비우고, 그다음 Ctrl+Alt+Enter(현재 실행 취소)로 지금 그리는 작업을 멈춥니다. 현재 실행 취소만 누르면 다음 작업이 곧바로 시작되고, 보류 작업 지우기만 하면 지금 작업은 끝까지 갑니다. 하나만 빼려면 작업 기록 · 대기열 패널에서 그 작업의 취소 단추를 씁니다.

대기열이 길 때 한 장을 먼저 보려면요?

배치 수를 1로 내리고 Shift를 누른 채 실행 버튼을 누르거나 Ctrl+Shift+Enter를 누릅니다. 새 작업이 기다리는 작업들 앞에 서고, 지금 그리는 작업이 끝나는 대로 실행됩니다. 실행 중인 작업을 밀어내지는 않습니다.

참고 자료

  1. ComfyUI 소스 코드 nodes.py — Empty Latent Image의 batch_size(기본 1 · 1~4096)와 잠재 이미지 텐서 모양, Save Image가 배치 안 그림마다 같은 실행 요청(prompt)을 PNG에 적고 파일 번호를 1씩 올리는 부분, %batch_num% 치환, filename_prefix 설명 문구, Preview Image가 임시 폴더에 저장하는 부분. github.com
  2. ComfyUI 소스 코드 folder_paths.py — get_save_image_path가 폴더 안 같은 접두사 파일의 가장 큰 번호 + 1로 시작 번호를 정하는 부분, %year% · %month% · %day% · %hour% · %minute% · %second% · %width% · %height% 치환, output 폴더 밖 저장을 막는 부분. github.com
  3. ComfyUI 소스 코드 execution.py — PromptQueue가 heapq로 번호가 작은 작업부터 꺼내는 부분, wipe_queue가 대기 목록만 비우는 부분, execute가 캐시에 결과가 있는 노드를 다시 실행하지 않는 부분, 기록 최대 10000개. github.com
  4. ComfyUI 소스 코드 main.py — prompt_worker가 대기열에서 한 작업씩 꺼내 실행하는 반복, 기본 캐시 방식(RAM 압력 캐시) 선택. github.com
  5. ComfyUI 소스 코드 server.py — POST /prompt의 번호 매기기(front면 음수), POST /queue의 clear · delete, POST /interrupt가 지정한 작업이 실행 중일 때만 멈추는 부분. github.com
  6. ComfyUI 소스 코드 comfy/samplers.py — _calc_cond_batch가 남은 메모리를 보고 조건(긍정 · 부정)을 묶을지 정하는 부분(필요 메모리 × 1.5 < 남은 메모리), 입력 크기가 잠재 배치 전체 단위인 부분. github.com
  7. ComfyUI 소스 코드 comfy/sd.py — VAE decode가 남은 메모리로 한 번에 풀 장 수를 정해 나눠 푸는 부분, 메모리가 모자라면 타일 디코딩으로 다시 시도하며 남기는 경고 문구. github.com
  8. ComfyUI README — 같은 그래프를 두 번 넣으면 첫 번째만 실행되고 바뀐 부분만 다시 실행된다는 설명, Ctrl+Enter · Ctrl+Shift+Enter · Ctrl+Alt+Enter 단축키 표. github.com
  9. ComfyUI 프런트엔드 소스 코드 app.ts — queuePrompt가 배치 수만큼 반복하며 매번 beforeQueued · afterQueued 위젯 콜백을 부르고 실행 요청을 따로 보내는 부분, 오류가 나면 반복을 멈추는 부분. github.com
  10. ComfyUI 프런트엔드 소스 코드 BatchCountEdit.vue — 배치 수 칸의 최솟값 1, 위 화살표는 두 배 · 아래 화살표는 절반, 숫자 아닌 글자 제거, 상한 설정값으로 자르는 부분. github.com
  11. ComfyUI 프런트엔드 소스 코드 coreSettings.ts — Comfy.QueueButton.BatchCountLimit(기본 100), Comfy.Queue.MaxHistoryItems(기본 64 · 2~256), Comfy.WidgetControlMode(기본 after). github.com
  12. ComfyUI 프런트엔드 소스 코드 ComfyQueueButton.vue — 배치 수 칸이 실행 버튼 왼쪽에 붙는 구성, 실행 · 변경 시 · 즉시 세 모드 메뉴(즉시는 클라우드판 제외), Shift를 누른 채 클릭하면 맨 앞 명령을 부르는 부분. github.com
  13. ComfyUI 프런트엔드 소스 코드 autoQueueService.ts · queueSettingsStore.ts — 즉시 모드는 대기 작업 수가 0이 되고 마지막 실행 오류가 없을 때 다시 넣고, 변경 시 모드는 그래프가 바뀌면 넣되 실행 중이면 끝난 뒤 한 번만 넣는 부분, 기본 모드 disabled · 배치 수 1. github.com
  14. ComfyUI 프런트엔드 소스 코드 useCoreCommands.ts — Comfy.QueuePrompt(번호 0) · Comfy.QueuePromptFront(번호 −1) · Comfy.Interrupt(실행 중 작업 id로 중단) · Comfy.ClearPendingTasks(대기열만 비움). github.com
  15. ComfyUI 프런트엔드 소스 코드 keybindings/defaults.ts — Ctrl+Enter = QueuePrompt, Ctrl+Shift+Enter = QueuePromptFront, Ctrl+Alt+Enter = Interrupt 기본 단축키. github.com
  16. ComfyUI 프런트엔드 한국어 번역 ko/main.json · ko/commands.json · ko/settings.json — 배치 수 · 실행 · 변경 시 · 즉시 · 즉시 실행 중지 · 현재 실행 취소 · 보류 중인 작업 지우기 · 배치 수 제한 · 실행 큐 기록 갯수 표기. github.com
  17. ComfyUI 공식 문서. EmptyLatentImage — batch_size «한 배치에서 만들 잠재 이미지 수 · 여러 잠재 표현을 동시에 만들어 일괄 처리» 설명. docs.comfy.org
  18. ComfyUI 공식 문서. Images, Latents, and Masks — LATENT 텐서 모양 [B,C,H,W] · IMAGE 텐서 모양 [B,H,W,C] 설명. docs.comfy.org
  19. ComfyUI 소스 코드 comfy/cli_args.py — --cache-ram(기본 캐시 방식) · --cache-none(실행마다 모든 노드를 다시 실행) 옵션 설명. github.com
이 글의 동작 설명은 2026년 10월 15일에 내려받은 ComfyUI 저장소의 nodes.py · folder_paths.py · execution.py · main.py · server.py · comfy/samplers.py · comfy/sd.py · comfy/cli_args.py · README, ComfyUI 프런트엔드 저장소의 app.ts · BatchCountEdit.vue · ComfyQueueButton.vue · autoQueueService.ts · queueSettingsStore.ts · useCoreCommands.ts · keybindings/defaults.ts · coreSettings.ts · 한국어 번역 파일, ComfyUI 공식 문서(EmptyLatentImage · Images, Latents, and Masks)를 따랐다. 실제 ComfyUI를 띄워 batch_size와 배치 수의 속도 · 메모리를 재지는 않았으며, 어느 값부터 메모리가 넘치는지는 모델 · 해상도 · 그래픽카드에 따라 다르다. 그림 속 S · S′ 등은 설명용 기호이며 실제 시드 값이 아니다. ComfyUI는 자주 갱신되므로 칸 이름 · 기본값 · 단축키 · 메뉴 위치는 쓰는 판에서 다시 확인한다. 이 글은 ComfyUI 개발진과 관계없는 개인 블로그의 정리다.
ComfyUI스테이블디퓨전배치대기열AI이미지워크플로
junetapa
junetapa
AI 도구를 직접 굴려 보고 남은 기록을 정리한다.
Twitter Facebook URL 복사