AI IMAGE · SEED

ComfyUI 시드 고정과 CFG — 같은 그림 다시 뽑고 한 칸만 바꾸기

junetapa 약 15분

마음에 드는 그림이 한 장 나와서 조금만 손보려고 했는데, 실행 버튼을 다시 누르자 전혀 다른 그림이 나온다. 다시 돌아가려고 KSampler의 seed 칸을 보면 숫자가 이미 바뀌어 있다. ComfyUI를 처음 쓸 때 가장 흔하게 겪는 일이다. 이 글은 2026년 10월 12일에 ComfyUI 본체 저장소(nodes.py · comfy/sample.py · comfy/samplers.py · k_diffusion/sampling.py)와 프런트엔드 저장소(valueControlWidgets.ts · valueControl.ts · coreSettings.ts)의 소스 코드를 직접 열어 대조했다. 시드 칸이 언제 어떻게 바뀌고 시드가 실제로 무엇을 정하는지를 코드 줄 단위로 확인해 정리했다. 그 위에서 같은 그림을 다시 뽑는 법, 배치 가운데 한 장만 다시 뽑는 법, 시드를 묶어 두고 CFG 한 칸만 바꿔 견주는 순서를 차례로 적는다.

이어 읽기

시드를 묶고 해상도 · 스텝 · CFG · 샘플러를 차례로 점검하는 큰 순서는 첫 그림이 이상할 때 점검 순서에 있다. 이 글은 그 가운데 «시드» 칸 하나를 깊게 판다. 그림 파일에 시드가 어떻게 저장되는지는 워크플로 불러오기 편, 실행 버튼을 눌렀는데 오류가 뜰 때는 오류 메시지 읽는 법 편을 본다.

시드가 정하는 것 — 처음 잡음 한 장

텍스트로 그림을 만드는 과정은 잡음으로 가득한 잠재 이미지에서 출발해 잡음을 조금씩 걷어 내는 일이다. 시드는 그 출발점 잡음을 만드는 난수의 씨앗이다. ComfyUI 공식 문서는 KSampler의 seed를 «재현 가능한 결과를 위한 무작위 시드»로 설명하고, 노드 코드의 설명 문구도 «잡음을 만드는 데 쓰는 무작위 시드»라고 적었다.

코드를 따라가면 시드가 쓰이는 자리가 분명하다. KSampler는 잡음을 만들 때 comfy/sample.py의 prepare_noise를 부르고, 이 함수는 torch.manual_seed(seed)로 난수 생성기를 맞춘 뒤 잠재 이미지와 같은 크기의 잡음을 뽑는다. 이때 잡음은 그래픽카드가 아니라 CPU에서, 32비트 부동소수점으로 만든 다음 잠재 이미지의 자료형으로 바꾼다. 함수가 받는 재료는 시드와 잠재 이미지의 크기뿐이다. 그러니 처음 잡음은 이 두 가지가 같으면 같고, 둘 가운데 하나라도 다르면 처음부터 다른 잡음이 된다.

이 사실에서 «무엇을 바꿔도 출발점이 그대로인가»가 갈린다.

바꾼 칸처음 잡음이유
프롬프트 · 네거티브그대로잡음 함수의 재료가 아님
CFG · steps · 샘플러 · 스케줄러그대로잡음 함수의 재료가 아님
폭 · 높이달라짐잠재 이미지 크기가 바뀜
배치 안 순번달라짐배치 전체 잡음을 한꺼번에 뽑음(아래 절)
잠재 채널 수가 다른 모델 계열달라짐빈 잠재 이미지를 모델의 채널 수에 맞춰 다시 만든 뒤 잡음을 뽑음

표의 위 두 줄이 이 글의 출발점이다. 시드와 크기를 묶어 두면 프롬프트나 CFG를 바꿔도 같은 출발점에서 다른 길을 걷게 되므로, 결과의 차이를 바꾼 칸 탓으로 읽을 수 있다. 반대로 폭과 높이를 바꾸면 같은 시드라도 출발점이 통째로 바뀌므로 «같은 시드인데 구도가 완전히 달라졌다»는 것은 이상한 일이 아니다.

단계마다 잡음을 더하는 샘플러

한 가지 단서가 붙는다. euler_ancestral처럼 이름에 ancestral이 붙은 샘플러는 처음 잡음 말고도 단계마다 새 잡음을 조금씩 더한다. k_diffusion/sampling.py를 보면 이 샘플러들은 같은 시드로 계산 장치(대개 그래픽카드)의 생성기를 맞춘 뒤 단계마다 잡음을 뽑는다. dpmpp_2m_sde 같은 SDE 계열도 시드를 받아 잡음 생성기를 만들며, 이름 끝에 _gpu가 붙은 판은 그 계산을 GPU에서 한다. 이런 샘플러도 같은 시드와 같은 설정이면 같은 순서로 잡음을 뽑지만, 스텝 수를 바꾸면 더해지는 잡음의 횟수와 시점이 함께 바뀐다. 시드를 묶고 스텝만 바꿨는데 그림이 크게 달라진다면 샘플러 이름부터 본다.

control after generate — 네 가지 값

KSampler의 seed 칸 바로 아래에는 control after generate라는 칸이 붙어 있다. 노드 코드는 seed 입력에 control_after_generate 표시만 달고, 실제 칸은 프런트엔드가 만든다. 프런트엔드 코드에서 이 칸의 기본값은 randomize다. 그래서 KSampler를 새로 놓으면 실행할 때마다 시드가 무작위로 바뀐다.

고를 수 있는 값은 4가지이고, 한국어 화면에서는 «생성 후 제어» 아래에 고정 값 · 값 증가 · 값 감소 · 값 무작위화로 표시된다.

값(영문)한국어 표시실행 뒤 시드 칸
fixed고정 값그대로 둔다
increment값 증가1을 더한다
decrement값 감소1을 뺀다
randomize값 무작위화범위 안에서 새 숫자를 고른다

숫자 범위도 코드에 적혀 있다. 노드가 받을 수 있는 시드는 0부터 0xffffffffffffffff(18,446,744,073,709,551,615)까지다. 다만 randomize가 고르는 값은 그 전체가 아니다. 프런트엔드는 최댓값을 1,125,899,906,842,624로 잘라 그 안에서 무작위로 고른다. 직접 큰 시드를 입력하는 것은 막지 않지만 무작위로 나오는 숫자는 이 범위 안에 있다는 뜻이다.

increment와 decrement는 «비슷한 그림을 차례로 보는» 기능이 아니라는 점도 짚어 둔다. 시드가 1만 달라도 prepare_noise는 생성기를 새 시드로 다시 맞추므로 잡음은 처음부터 새로 뽑힌다. 이웃한 시드는 이웃한 그림을 뜻하지 않는다. increment는 «지나간 시드를 순서대로 기록해 두고 싶을 때» 쓸모가 있다. 무작위 대신 1씩 늘려 두면 나중에 몇 번째 실행이었는지로 시드를 거꾸로 셀 수 있다.

칸의 숫자는 한 박자 늦다

실행했더니 시드 칸이 벌써 바뀌어 있는 이유는 값을 바꾸는 시점에 있다. 프런트엔드 코드는 제어 칸에 «대기열에 넣기 전»과 «넣은 뒤» 두 자리를 두고, 설정값에 따라 한쪽에서만 값을 바꾼다. 이 설정(Comfy.WidgetControlMode)의 기본값은 after다. 그러니 기본 설정에서는 실행 버튼(또는 Ctrl+Enter)을 누르는 순간 지금 칸의 숫자로 실행 요청이 나가고, 바로 뒤에 칸이 다음 값으로 바뀐다. 그림이 다 그려져 화면에 뜰 때쯤 칸에 보이는 숫자는 방금 그림의 시드가 아니라 다음 실행에 쓸 시드다.

위젯 제어 모드 after와 before에서 시드 칸 숫자가 바뀌는 때 — after(기본값)는 대기열에 넣은 직후 바꾸므로 그림을 볼 때 칸에는 이미 다음 시드가 들어 있고, before는 넣기 직전에 바꾸되 첫 실행은 건너뛰므로 칸의 숫자가 마지막 그림의 시드와 같다
기본 설정에서 시드 칸은 그림보다 한 발 앞서 있다.

이것이 헷갈린다면 설정의 «위젯 제어 모드(Widget control mode)»를 before로 바꾼다. before에서는 대기열에 넣기 직전에 값을 바꾸고, 화면을 연 뒤 첫 실행에서는 바꾸지 않는다. 그래서 칸에 보이는 숫자가 마지막으로 나온 그림의 시드와 맞는다. 두 모드 모두 fixed일 때는 아무것도 바꾸지 않는다.

시드 칸을 입력 점으로 바꿔 다른 노드의 선을 연결해 두었다면, 제어 칸은 값을 건드리지 않고 건너뛴다. 여러 KSampler에 같은 시드를 나눠 주려고 시드 값을 한 노드에서 끌어오는 워크플로라면 그 노드 쪽 제어 칸을 본다.

마음에 든 그림의 시드를 되찾는 곳

after 모드에서 randomize로 여러 장을 뽑다 보면, 마음에 든 그림의 시드는 이미 칸에서 사라진 뒤다. 이때 되찾을 곳은 그림 파일이다. Save Image 노드는 PNG를 저장할 때 서버가 받은 실행 요청(prompt)을 글자로 함께 적고, 화면의 워크플로도 덧붙인다. 실행 요청은 시드 칸이 바뀌기 전에 이미 나간 것이므로, 파일에 적힌 시드는 그 그림을 만든 값이다. README도 생성한 PNG를 웹 화면에 끌어다 놓거나 불러오면 그 그림을 만든 시드를 포함한 전체 워크플로를 얻는다고 적었다.

순서는 이렇다.

  1. 마음에 든 그림의 PNG를 ComfyUI 화면에 끌어다 놓는다.
  2. 되살아난 KSampler의 seed 칸에 그 그림의 시드가 들어온다.
  3. control after generate를 fixed로 바꾼다. 이것을 빼먹으면 다음 실행 뒤 또 바뀐다.
  4. 그대로 한 번 실행해 같은 그림이 나오는지 먼저 본다. 같은 그림이 나와야 그다음에 바꾸는 칸의 효과를 읽을 수 있다.

PNG에 정보가 남아 있으려면 저장할 때 메타데이터가 꺼져 있지 않아야 한다. ComfyUI를 --disable-metadata 옵션으로 띄우면 파일에 프롬프트 메타데이터를 저장하지 않는다. 공유용으로 메타데이터를 지운 사본만 남겨 두었다면 원본 PNG를 찾는다. 파일 안에 무엇이 어떤 모양으로 들어가는지는 워크플로 불러오기 편에 정리했다.

프롬프트에 {a|b} 를 썼다면

README에 따르면 프롬프트에 {day|night} 같은 와일드카드를 쓰면, 프런트엔드가 대기열에 넣을 때마다 그 가운데 하나를 무작위로 골라 바꿔 넣는다. 시드를 고정해도 프롬프트 글자가 실행마다 달라질 수 있다는 뜻이다. 같은 그림을 다시 뽑으려면 PNG의 실행 요청에 남은 «이미 바뀐» 프롬프트 글을 그대로 옮겨 쓴다. 중괄호를 글자 그대로 쓰려면 \{ \} 처럼 역슬래시를 붙인다.

배치 n번째 그림만 다시 뽑기

Empty Latent Image의 batch_size를 올리면 한 번 실행에 여러 장이 나온다. 코드에서 이 칸은 1부터 4096까지 받는다. 넉 장 가운데 셋째가 마음에 들어 그것만 다시 뽑으려고 할 때 많이 하는 실수가 «시드에 2를 더해 한 장만 뽑는 것»이다.

코드는 그렇게 움직이지 않는다. 배치에 순번 정보가 없으면 prepare_noise는 시드로 생성기를 한 번만 맞추고, 배치 전체 크기의 잡음을 한 번에 뽑는다. 넉 장 모두가 시드 하나의 난수 흐름을 나눠 쓰는 셈이다. 그래서 «시드 + 2»로 맞춘 생성기에서 나온 잡음은 배치의 셋째 칸과 관계가 없다. 시드 칸에 셋째 그림만의 시드가 따로 있는 것도 아니다. PNG에 적히는 것도 배치 전체의 시드 하나다.

배치 안 n번째 그림의 잡음을 다시 만드는 batch_index 경로 — 배치 4장은 시드 S로 생성기를 한 번 맞춰 잡음을 한꺼번에 뽑으므로 셋째 그림은 시드 S+2와 관계가 없고, Latent From Batch로 batch_index 2를 적어 두면 KSampler가 0번부터 2번까지 차례로 뽑아 2번 것만 남긴다
배치 셋째 그림의 시드는 «S + 2»가 아니라 «S의 셋째 몫»이다.

ComfyUI가 이 경우를 위해 둔 장치가 batch_index다. Latent From Batch 노드는 배치에서 원하는 순번부터 정해진 개수를 꺼내고, 꺼낸 잠재 이미지에 «원래 몇 번째였는지»를 batch_index라는 이름으로 적어 둔다. KSampler는 잠재 이미지에 batch_index가 있으면 그것을 잡음 함수에 넘기고, prepare_noise는 시드로 생성기를 맞춘 뒤 0번부터 요청한 순번까지 한 장 크기씩 차례로 잡음을 뽑아 요청한 순번의 것만 남긴다. 배치 전체를 돌리지 않고도 생성기에서 그 순번 몫의 잡음을 꺼내도록 짠 구조다.

연결은 세 노드면 된다.

  1. Empty Latent Image — 폭 · 높이와 batch_size를 처음 배치와 똑같이 둔다.
  2. Latent From Batch — batch_index에 원하는 순번, length에 1을 넣는다. 순번은 0부터 센다. 넉 장 가운데 셋째라면 2다. 음수를 넣으면 뒤에서부터 센다.
  3. KSampler — 처음 배치와 같은 시드를 넣고 fixed로 둔다.

Latent From Batch는 꺼낸 개수만큼만 잠재 이미지를 남기므로 실행하면 한 장만 그린다. 이미 꺼낸 잠재 이미지를 다시 꺼낼 때는 원래 batch_index를 이어받아 순번이 엉키지 않게 해 두었다.

가장 확실한 길은 통째로 다시 돌리기

batch_index 경로는 코드 구조로 확인한 방법이다. 이 경로로 뽑은 잡음이 배치 실행 때와 숫자 하나까지 같은지는 이 글을 쓰며 실제 그림으로 맞춰 보지 않았다. 확실하게 같은 그림이 필요하면 같은 시드 · 같은 배치 크기 · 같은 설정으로 배치 전체를 다시 돌려 그 순번의 그림을 고른다. 한 장만 뽑는 경로는 그다음에 칸을 바꿔 가며 견줄 때 시간을 아끼는 용도로 쓴다.

시드를 묶고 한 칸만 — CFG부터 움직인다

같은 그림이 다시 나오는 것을 확인했다면 이제 «조금만 바꾸기»다. 앞의 표대로 시드와 크기를 묶으면 처음 잡음은 그대로이므로, 한 번에 한 칸만 바꾸면 결과의 차이가 그 칸에서 왔다고 읽을 수 있다. 가장 먼저 만질 만한 칸이 CFG다.

CFG가 하는 계산

CFG 칸은 0부터 100까지, 0.1 단위로 움직이고 기본값은 8.0이다. 공식 문서는 값이 높을수록 프롬프트에 가깝게 맞추지만 너무 높으면 품질이 떨어진다고 설명한다. 계산식은 comfy/samplers.py의 cfg_function에 한 줄로 적혀 있다.

text
결과 = 빈 조건 예측 + (조건 예측 − 빈 조건 예측) × cfg

조건 예측은 프롬프트를 넣고 모델이 내놓은 값, 빈 조건 예측은 네거티브(또는 아무 조건 없이)를 넣고 내놓은 값이다. cfg는 두 예측의 차이를 몇 배로 늘려 쓸지를 정한다. 그래서 CFG를 올리면 «프롬프트가 있을 때와 없을 때의 차이» 쪽으로 더 세게 밀고, 내리면 덜 민다. CFG가 1.0이면 식이 조건 예측 하나만 남으므로, ComfyUI는 빈 조건 쪽 계산을 아예 건너뛴다. 이때 네거티브 칸이 계산에 들어가지 않는다는 점은 첫 그림 점검 글의 네거티브 절에 따로 적었다.

견주는 순서

  1. 시드를 fixed로 묶고, 지금 값으로 한 장을 뽑아 기준 그림으로 둔다.
  2. CFG만 조금 올린 값과 조금 내린 값으로 한 장씩 뽑는다. 다른 칸은 손대지 않는다.
  3. 세 장을 나란히 놓고 프롬프트를 따르는 정도와 색 · 질감의 차이를 본다. 체크포인트 설명 글에 권장 CFG가 있으면 그 범위를 벗어나지 않게 움직인다.
  4. 마음에 드는 CFG를 정했으면 그 값을 묶고, 그다음에 프롬프트의 한 구절이나 스텝 같은 다른 칸으로 넘어간다.

바꾼 값은 그림 파일에 함께 저장되므로 따로 적어 두지 않아도 되지만, 여러 장을 견주다 보면 어느 파일이 어느 값이었는지 헷갈린다. Save Image의 파일 이름 앞부분(filename_prefix)에 cfg7처럼 바꾼 칸을 적어 두면 탐색기에서 바로 가려진다.

프롬프트를 바꿀 때도 같은 원칙이다. 시드를 묶은 채 한 구절만 고치면 구도는 대체로 비슷하게 유지되면서 고친 구절 쪽이 달라지는 경우가 많지만, 이것은 모델과 그림에 따라 다르고 코드가 보장하는 성질은 아니다. 코드가 보장하는 것은 «출발점 잡음이 같다»는 데까지다. 구도를 확실하게 붙잡아 두고 일부만 바꾸고 싶다면 시드보다 강한 도구가 있다. 원래 그림을 바탕으로 다시 그리는 img2img와 denoise는 denoise를 낮출수록 원래 구조를 더 남긴다.

KSampler (Advanced)와 사용자 지정 샘플러의 시드

KSampler (Advanced)에서는 같은 칸의 이름이 noise_seed이고, 역시 control after generate가 붙는다. 이 노드에는 add_noise 칸이 하나 더 있다. disable로 두면 prepare_noise 대신 0으로 채운 잡음을 쓰므로 처음 잡음에 시드가 쓰이지 않는다. 두 KSampler (Advanced)를 이어 앞에서 일부 단계를 돌리고 뒤에서 나머지를 돌리는 워크플로에서는, 대개 뒤쪽 노드의 add_noise가 꺼져 있다. 이런 워크플로에서 시드를 바꿔도 그림이 변하지 않는다면 시드가 실제로 쓰이는 앞쪽 노드의 칸을 바꾸고 있는지 본다. 다만 add_noise를 꺼도 시드 값은 샘플러에 함께 넘어가므로, ancestral 샘플러의 단계별 잡음에는 쓰인다.

샘플러를 여러 노드로 나눠 짜는 SamplerCustom 계열에서는 Random Noise 노드가 noise_seed 칸을 갖고, 내부에서는 같은 prepare_noise를 부른다. 이름과 자리는 달라도 «시드와 잠재 이미지 크기로 처음 잡음이 정해진다»는 원리는 같다.

같은 시드인데 다른 그림이 나올 때

시드를 그대로 넣었는데도 같은 그림이 나오지 않는다면 다음 순서로 본다.

확인할 것왜
control after generate가 fixed인가randomize · increment면 실행 직후 칸이 바뀐다
폭 · 높이 · batch_size가 처음과 같은가잠재 이미지 크기가 다르면 잡음이 처음부터 다르다
배치의 몇 번째 그림이었나둘째부터는 «시드 + n»이 아니다 — batch_index로 다시 뽑는다
프롬프트에 중괄호 와일드카드가 있나실행마다 글이 바뀔 수 있다
체크포인트 · LoRA · 샘플러 · 스케줄러 · 스텝이 같은가출발점이 같아도 길이 달라진다
다른 프로그램(A1111 · Forge 등)에서 쓰던 시드인가프로그램마다 구현과 기본값이 달라 같은 시드가 같은 그림을 주지 않는다

마지막 줄은 이 글에서 다룬 ComfyUI 코드 바깥의 이야기다. 다른 프로그램에서 쓰던 설정을 옮겨 올 때의 차이는 첫 그림 점검 글이 소개한 이전 정리를 함께 본다. 같은 ComfyUI라도 다른 PC에서 결과가 비트 단위로 같은지는 이 글에서 확인하지 않았다. 코드로 확인되는 것은 처음 잡음이 CPU에서 만들어진다는 데까지이고, 그 뒤의 계산은 각 PC의 그래픽카드에서 이루어진다.

자주 묻는 것

실행하고 나면 시드 숫자가 바뀌어 있어요. 방금 그림의 시드는 어디서 보나요?

기본 설정에서는 control after generate가 randomize이고, 위젯 제어 모드가 after라서 대기열에 넣은 직후 시드 칸이 다음 값으로 바뀝니다. 방금 그림의 시드는 그 그림 PNG에 함께 저장된 실행 요청에 있습니다. PNG를 화면에 끌어다 놓으면 시드가 칸에 다시 들어오고, 그 뒤 control after generate를 fixed로 바꾸면 됩니다. 칸의 숫자가 마지막 그림과 맞기를 바라면 설정에서 위젯 제어 모드를 before로 바꿉니다.

배치로 넉 장을 뽑았는데 셋째만 다시 뽑으려면 시드에 2를 더하면 되나요?

아닙니다. 배치는 시드로 생성기를 한 번 맞춘 뒤 넉 장 몫의 잡음을 한꺼번에 뽑으므로, 시드에 2를 더하면 전혀 다른 잡음이 됩니다. Empty Latent Image를 처음과 같은 크기 · 배치로 두고 Latent From Batch에 batch_index 2, length 1을 넣어 KSampler에 연결한 뒤 같은 시드로 실행합니다. 확실하게 같은 그림이 필요하면 배치 전체를 같은 설정으로 다시 돌려 셋째를 고릅니다.

시드를 1씩 늘리면 비슷한 그림이 차례로 나오나요?

아닙니다. ComfyUI는 실행할 때마다 시드로 난수 생성기를 새로 맞춰 잡음을 처음부터 뽑으므로, 시드가 1만 달라도 출발점 잡음은 서로 관계가 없습니다. increment는 비슷한 그림을 보려는 기능이 아니라 시드를 순서대로 남겨 두는 용도로 쓰는 편이 맞습니다.

시드를 고정했는데 해상도를 바꾸니 구도가 완전히 달라졌어요.

정상입니다. 처음 잡음은 시드와 잠재 이미지의 크기로 정해지므로 폭이나 높이를 바꾸면 같은 시드라도 출발점이 통째로 바뀝니다. 같은 구도를 크게 뽑고 싶다면 해상도를 바꿔 다시 그리기보다 업스케일이나 img2img로 원래 그림을 바탕 삼는 쪽을 씁니다.

CFG를 바꾸면 시드도 다시 정해야 하나요?

아닙니다. CFG는 잡음을 만드는 재료가 아니라 단계마다 조건 예측과 빈 조건 예측의 차이를 몇 배로 쓸지 정하는 값이라, 시드를 그대로 두고 CFG만 바꿔 견주는 것이 이 글의 순서입니다. 다만 CFG를 1.0으로 두면 빈 조건 쪽 계산이 빠지므로 네거티브 프롬프트가 결과에 들어가지 않습니다.

참고 자료

  1. ComfyUI 소스 코드 nodes.py — KSampler seed(0~0xffffffffffffffff · control_after_generate) · cfg(기본 8.0 · 0~100 · 0.1 단위) 입력, common_ksampler가 batch_index를 잡음 함수에 넘기는 부분, Empty Latent Image batch_size(1~4096), Latent From Batch의 batch_index · length 처리, KSampler (Advanced)의 add_noise · noise_seed, Save Image가 PNG에 prompt를 적는 부분. github.com
  2. ComfyUI 소스 코드 comfy/sample.py — prepare_noise가 torch.manual_seed(seed)로 생성기를 맞추고 CPU에서 잡음을 만드는 부분, batch_index가 있으면 0번부터 그 순번까지 한 장 크기씩 차례로 뽑아 필요한 것만 남기는 부분, add_noise를 끄면 0으로 채운 잡음을 쓰는 부분. github.com
  3. ComfyUI 소스 코드 comfy/samplers.py — cfg_function의 계산식(uncond + (cond − uncond) × cfg), CFG가 1.0이면 빈 조건 쪽 계산을 건너뛰는 sampling_function, 샘플러 이름 목록. github.com
  4. ComfyUI 소스 코드 comfy/k_diffusion/sampling.py — ancestral 샘플러가 같은 시드로 계산 장치의 생성기를 맞춰 단계마다 잡음을 더하는 default_noise_sampler, SDE 계열의 BrownianTreeNoiseSampler(_gpu 판은 GPU에서). github.com
  5. ComfyUI 프런트엔드 소스 코드 valueControlWidgets.ts — 제어 칸의 기본값 randomize, after 모드는 대기열에 넣은 뒤 · before 모드는 넣기 전(첫 실행 제외)에 값을 바꾸는 부분, 시드 칸에 선이 연결되면 제어를 건너뛰는 부분. github.com
  6. ComfyUI 프런트엔드 소스 코드 valueControl.ts — fixed · increment · decrement · randomize 계산, randomize가 고르는 범위의 상한 1125899906842624. github.com
  7. ComfyUI 프런트엔드 소스 코드 coreSettings.ts — Comfy.WidgetControlMode 설정(before · after, 기본 after). github.com
  8. ComfyUI 프런트엔드 한국어 번역 ko/main.json · ko/settings.json — 생성 후 제어 · 생성 전 제어, 고정 값 · 값 증가 · 값 감소 · 값 무작위화, 위젯 제어 모드 표기. github.com
  9. ComfyUI 공식 문서. KSampler — seed «재현 가능한 결과를 위한 무작위 시드», CFG «높을수록 프롬프트에 맞지만 너무 높으면 품질이 떨어짐» 설명. docs.comfy.org
  10. ComfyUI 공식 문서. Latent From Batch — batch_index(시작 순번) · length(꺼낼 개수) 입력 설명. docs.comfy.org
  11. ComfyUI README — 생성한 PNG를 끌어다 놓으면 시드를 포함한 전체 워크플로를 얻는다는 설명, {day. github.com
  12. ComfyUI 소스 코드 comfy/cli_args.py — --disable-metadata(파일에 프롬프트 메타데이터를 저장하지 않음) 옵션. github.com
  13. ComfyUI 소스 코드 comfy_extras/nodes_custom_sampler.py — SamplerCustom · Random Noise 노드의 noise_seed(control_after_generate)와 내부에서 prepare_noise를 부르는 Noise_RandomNoise. github.com
이 글의 동작 설명은 2026년 10월 12일에 내려받은 ComfyUI 저장소의 nodes.py · comfy/sample.py · comfy/samplers.py · comfy/k_diffusion/sampling.py · comfy/cli_args.py · README, ComfyUI 프런트엔드 저장소의 valueControlWidgets.ts · valueControl.ts · coreSettings.ts · 한국어 번역 파일, ComfyUI 공식 문서(KSampler · Latent From Batch)를 따랐다. 그림 속 A · B · S는 설명용 기호이며 실제 시드 값이 아니다. batch_index 경로와 배치 실행 결과가 같은지는 실제 그림으로 대조하지 않았다. ComfyUI는 자주 갱신되므로 칸 이름 · 기본값 · 화면 표시는 쓰는 판에서 다시 확인한다. 이 글은 ComfyUI 개발진과 관계없는 개인 블로그의 정리이며, 모델 파일 사용은 각 저장소와 라이선스를 확인한 뒤 판단한다.
ComfyUI스테이블디퓨전시드CFGAI이미지워크플로
junetapa
junetapa
AI 도구를 직접 굴려 보고 남은 기록을 정리한다.
Twitter Facebook URL 복사