IT정보/AI(이미지, LLM 등)

[ ComfyUI ] 이미지의 원하는 부분만 바꾸기, Flux Inpainting 기초

카루루1007 2024. 12. 23. 01:06
728x90
반응형

ComfyUI로 이미지를 생성을 했는데

어느 특정 부분이 마음에 들지 않아 해당 부분만 바꾸고 싶을 경우가 있습니다.

 

이를 Inpainting이라고 하며

아래 그림과 같이 왼쪽 그림의 안경을 오른쪽 그림의 선글라스로 바꿀 수 있는 기능입니다.

 

반응형

 준비하기

 

설치해야 할 Custom Node입니다.

KJNodes for ComfyUI, ComfyUI Impact Pack을 설치하고 

ComfyUI를 재시작합니다.

 

 대 제 목 WorkFlow 구성하기

 

먼저 기본 Flux WorkFlow를 구성합니다.

아래 그림과 같이 간단하게 몇 가지 노드만 구성합니다.

 

이 노드에서 Load Diffusion Model, DualCLIPLoader는 별도로 연결할 노드가 있기 때문에

지금은 연결하지 않은 상태이며,

SamplerCustomAdvanced 노드의 latent_image 부분 역시 연결되지 않았습니다.

 

이제 inpainting을 위한 노드를 구성해 보겠습니다.

 

먼저 Differential Diffusion 노드를 추가합니다.

위치는 Load Diffusion Model 노드와 BasicGuider 노드 사이입니다.

 

추가로 아까 연결하지 않았던 Load Diffusion Model 노드와 BasicScheduler 노드도 연결해 줍니다.

 

다음 InpaintModelConditioning 노드를 추가하고

위 노드의 latent를 SamplerCustomAdvanced 노드의 latent_image에 연결하고,

positive를 BasicGuider 노드의 conditioning와 연결합니다.

negative 출력은 아무것도 연결하지 않아도 됩니다.

 

그다음 CLIP Text Encode (Prompt) 노드를 두 개 추가한 다음

DualCLIPLoader의 CLIP과 연결합니다.

그리고 각각의 CLIP Text Encode (Prompt) 노드를

InpaintModelConditioning 노드의 positive와 naegative에 각각 연결합니다.

 

FLUX는 부정 프롬프트가 필요 없지만, 

부득이하게 InpaintModelConditioning 노드에 연결해야 하기 때문에 

CLIP Text Encode (Prompt) 노드를 추가해 줍니다.

 

InpaintModelConditioning 노드의 vae는 Load VAE 노드와 연결합니다.

그다음 Gaussian Blur Mask 노드를 추가하여 출력부 MASK를 

InpaintModelConditioning 노드의 mask와 연결합니다.

 

Gaussian Blur Mask 노드의 입력부 mask를 

Load & Resize Image 노드의 mask와 연결합니다.

 

Load & Resize Image 노드의 image를 

InpaintModelConditioning 노드의 pixels와 연결하면

노드 구성은 끝이 납니다.

 

 특정 부분 이미지 수정해 보기

 

Load & Resize Image 노드의 upload를 눌러 이미지를 하나 가지고입니다.

 

불러온 이미지에 마우스 우클릭을 한 다음

open in MaskEditor을 눌러줍니다.

 

그다음 안경 부분만 칠한 다음 Save를 눌러줍니다.

 

그러면 Load & Resize Image 노드에 아래 그림과 같이

안경 부분만 선택된 것을 확인할 수 있습니다.

 

이제 긍정프롬프트에 Sunglasses라고 입력을 한 다음

이미지를 생성해 보겠습니다.

 

왼쪽 이미지가 원본 이미지이고

오른쪽 이미지가 inpainting을 통해 변경한 이미지입니다.

 

영역을 수정하면 아래와 같이 머리스타일만 변경할 수도 있습니다.

 

728x90

 참고사항

 

Differential Diffusion 노드마스킹한 영역을 수정할 때

기존 이미지와 더 조화롭게 수정해 주는 역할을 합니다.

 

해당 노드가 없어도 마스킹한 부분이 수정이 되지만,

Differential Diffusion 노드를 사용하는 것이 대부분 기존 이미지와 더 조화롭게 이미지가 생성됩니다.

 

Gaussian Blur Mask 노드의 

kernel_size와 sigma를 통해 기존 이미지와 바꿀 부분이 의미지의 경계가

얼마나 조화롭게 되는지를 결정할 수 있습니다.

 

두 값이 작아졌을 때 기존 이미지와 마스킹한 부분의 경계가 선명해지고,

두 값이 커졌을 때 기존 이미지와 마스킹한 부분의 경계가 희미해지는 경향이 있습니다.

 

Load & Resize Image 노드의 resize, width, height, keep_proportion은 이미지 사이즈와 관련된 옵션입니다.

repeat의 경우 10으로 지정하면 이미지가 10개 만들어집니다.

 

mask_channel 값은 사용자가 마스킹한 부분 중 

어느 부분을 선택할지 결정해 주는 옵션입니다.

alpha와 red, green, blue 즉, RGB 값을 선택할 수 있습니다.

 

보통 alpha를 선택하면 불투명한 부분을 모두 선택하므로

대략 마스킹한 부분 전체에 변형이 일어납니다.

red를 선택하면 RGB 값 중 마스킹 영역 중 red 값이 높은 부분

green을 선택하면 RGB 값 중 마스킹 영역 중 green 값이 높은 부분

blue를 선택하면 RGB 값 중 마스킹 영역 중 blue 값이 높은 부분만 선택이 되어

해당 부분 위주로 수정을 합니다.

 

예를 들어 검은색 머리카락이 있고 배경이 푸른 하늘인데

하늘과 머리카락이 겹치게 마스킹을 한 다음

mask_channel을 blue로 선택하면 하늘 부분만 다시 그리게 될 가능성이 높습니다.

Flux_Inpainting_Basic.json
0.01MB

728x90
반응형