얼마전 Black Forest Labs(이하 BLF)에서 FLUX.1 Kontext 를 공개했다는 소식을 알려드렸습니다. 이 글에서 아직 오픈소스인 dev 버전은 베타테스트 중이라고 말씀드렸는데, 이제 FLUX.1 Kontext (dev)를 사용할 수 있게 되었습니다.
소프트웨어
이 글에서는 스테이블 디퓨전용 GUI중에서도 제일 강력하며, 현재 거의 대세로 자리잡고 있는 ComfyUI를 사용합니다. ComfyUI가 처음이시라면, 설치 및 기본 사용방법 및 초보가이드를 확인하시기 바랍니다.
FLUX.1 Kontext 모델
FLUX.1 Kontext 모델은 이미지 생성과 편집 기능을 하나로 통합한 모델입니다. 즉, 그냥 텍스트-이미지 방식으로 이미지를 생성할 수 있을 뿐 아니라, 참조 이미지를 사용하여 새로운 이미지를 생성할 수도 있고, 생성된 이미지를 간단한 명령으로 편집할 수도 있습니다.
특히 ChatGPT나 Gemini를 사용하여 스타일을 바꾸는 기능을 보셨을 텐데, FLUX.1 Kontext도 기본적으로 비슷한 방법으로 동작합니다. 즉, 기존의 이미지에 존재하는 어떤 요소를 텍스트 명령만으로 변형할 수 있습니다. 이때 이미지의 피사체와 스타일은 그대로 유지됩니다.
FLUX.1 Kontext는 세가지 버전으로 발표되었습니다.
- Kontext [pro] : 빠르고 부드러운 편집을 위한 핵심 버전. 텍스트 기반의 생성, 이미지 기반의 편집, 스타일 복제 등을 하나의 통합된 프레임워크에서 수행할 수 있음. 대화식 워크플로에 적합
- Kontext [max] : 성능을 위주로 한 버전. 프롬프트의 이해도가 더 높고, 이미지내의 텍스트 처리가 더 정확한 버전. 특히 전문적인 용도에 적합
- Kontext [dev] : 최근 공개된 오픈웨이트 버전. 맞춤화 및 기능 개발을 위한 목적. 상용 버전에 비해 기능은 약하지만, 오픈 소스 생태계에 새로운 솔루션이 될 것으로 기대함
오픈웨이트란? 🔎오픈웨이트(open-weight)는 AI 모델의 가중치(weights)가 공개적으로 사용가능하다는 것으로, 다음과 같은 것이 가능합니다. - 신경망에 대한 학습된 매개변수(가중치)를 포함하는 파일을 다운로드 - 자신의 PC에서 혹은 클라우드 서비스로 사용 가능 - 상세 검토, 평가 및 미세조정 가능(그 결과는 자신의 데이터로 사용) 오픈웨이트는 오픈소스 모델과는 다릅니다. 오픈소스의 경우 학습 코드와 데이터 세트까지 모두 공개되고, 완전히 무료 라이스센스로 제공됩니다. |
기본적으로 Kontext [dev]도 pro 나 max 버전과 마찬가지로, 피사체의 식별성이나 전체적인 시각적 일관성 등의 이미지 기본 요소를 보존하도록 설계되었습니다. Black Forest Labs에 따르면 FLUX.1 Kontext [dev]는 몇몇 상용 시스템에 비해 상당한 정도의 품질 수준을 달성했다고 합니다.
기존 Flux 모델과의 호환
FLUX.1 Kontext [dev]는 FLUX [dev]모델에 사용된 학습 및 추론 도구와 호환가능하다고 합니다. 즉, 기존의 파이프라인이나 인터페이스에 FLUX.1 Kontext [dev] 모델만 끼워넣으면 그냥 사용할 수 있습니다. 따라서 Flux [dev]용 LoRA를 거의 대부분 그대로 사용할 수 있어, 기존의 사용자들의 만족감이 더 높다고 합니다.
이 글에서는 Kontext [dev] 버전을 사용하는 방법을 설명합니다.
따라하기
1 단계: 모델 다운로드
이 워크플로에서는 flux1-kontext-dev.safetensors모델을 사용합니다. 이 파일을 다운로드 받은 후, ComfyUI\models\diffusion_models 폴더에 넣어줍니다.
텍스트 인코더 모델 clip_l.safetensors 및 t5xxl_fp16.safetensors을 다운로드 받은 후, ComfyUI\models\clip 폴더에 넣어줍니다.
VAE 모델 ae.safetensors 을 다운로드 받은 후, ComfyUI\models\VAE 폴더에 넣어줍니다.
2 단계: 워크플로 불러오기
아래의 Json 파일을 다운로드 받아 ComfyUI로 불러옵니다.
이 워크플로를 불러오면 오류가 발생할 수 있습니다. 그러한 경우, 다음과 같은 작업이 필요합니다. 특히, ComfyUI를 실행시키고 ComfyUI 버전이 0.3.43 이상인지 확인해 보세요.
- 처음 사용할 때 - ComfyUI Manager 를 설치해야 합니다.
- ComfyUI를 오랜만에 사용할 때 - ComfyUI를 최신버전으로 업데이트해야 합니다.
- 노드가 없다고 (빨간색) 경고가 뜰 때 - 빠진 커스톰 노드를 가져오기해야 합니다.
- 불러오기 혹은 수행중 에러 발생시 - 커스톰 노드를 업데이트해야 합니다.
3 단계: 이미지 불러오기
아래와 같이 [Load Image] 노드에 원하는 이미지를 불러옵니다.
아래의 이미지를 사용하셔도 됩니다.
4 단계: 프롬프트 검토
여기에서는 카메라를 향해 돌아보도록 명령을 내렸습니다.
5 단계:이미지 생성
이제 화면 오른쪽 위에 있는 Run 버튼을 누르면 워크플로가 실행됩니다. 아래는 입력 이미지와 출력 이미지를 비교한 것입니다.
![]() |
![]() |
사진 복원
아래는 이 워크플로를 이용해 오래된 사진을 복원한 예입니다. 프롬프트는 "Remove blemishes from old photos and restore them to color" 입니다.
![]() |
![]() |
FLUX.1 Kontext 프롬프트 사용법
여기에 있는 내용은 ComfyUI의 FLUX.1 Kontext[dev] 용 템플릿에 포함된 내용을 정리한 것입니다. Kontext로 이미지를 변경하는 여러가지 경우에 대해 간략하지만 잘 설명이 된 것 같습니다.
간단한 변경시
- 간단하고 직접적인 변경: "Change the car color to red(자동차 색을 빨간 색으로)"
- 스타일을 유지하고자 할 때: "Change to daytime while maintaining the same style of the painting(그림 스타일을 유지하면서 낮으로 변경)"
스타일 복제시
- 스타일 명을 확실하게 입력할 것: "Transform to Bauhaus art style(바우하우스 스타일로 변경)"
- 특징을 설명할 것: "Transform to oil painting with visible brushstrokes, thick paint texture(브러시 자국이 잘 보이고 텍스처가 두꺼운 유화로 변경)"
- 구도를 유지하고자 할 때: "Change to Bauhaus style while maintaining the original composition(원래의 구도를 유지하면서 바우하우스 스타일로 변경)"
캐릭터 일관성 유지
- 구체적인 설명: "she(그 여자)" 대신에 "The woman with short black hair(검은머리 숏컷 여자)"와 같이
- 특징을 유지하고자 할 때: "while maintaining the same facial features, hairstyle, and expression(얼굴의 특징, 헤어스타일, 표정을 동일하게 유지하면서)"
- 단계별로 수정: 한꺼번에 모든 것을 변경하려고 하지말고, 예를 들면 배경을 수정한 뒤 자세 변경
텍스트 수정시
- 따옴표를 사용할 것: "Replace 'joy' with 'BFL'('joy'를 'BFL'로 대체)"
- 형식 유지하고자 할 때 : " Replace 'joy' with 'BFL' while maintaining the same font style(동일한 폰트 스타일을 유지하면서 'joy'를 'BFL'로 변경"
문제 해결
캐릭터를 변경할 경우
❌ Wrong: "Transform the person into a Viking(이 사람을 바이킹으로 바꿔줘)"
✅ Correct: "Change the clothes to be a viking warrior while preserving facial features(얼굴의 특징을 유지하면서 의상을 바이킹 전사로 바꿔줘)"
구도 위치를 변경할 경우
❌ Wrong: "Put him on a beach(그 사람을 해변에 옮겨줘)"
✅ Correct: "Change the background to a beach while keeping the person in the exact same position, scale, and pose(사람은 동일한 위치, 크기, 자세로 유지하면서 배경을 해변으로 바꿔줘)"
스타일 변경
❌ Wrong: "Make it a sketch(스케치로 바꿔줘)"
✅ Correct: "Convert to pencil sketch with natural graphite lines, cross-hatching, and visible paper texture(종이 질감이 보이면서 자연스러운 흑연 선과 해칭이 드러나는 연필 스케치로 변환해줘)"
핵심 원칙
- 구체적이고 명확할 것 - 정확산 설명을 사용하고, 모호한 용어는 피할 것
- 단계별 편집 - 여러가지 복잡한 변경을 분해해서 간단한 여러 단계로 실행할 것
- 보존을 명시할 것 - 변경시키지 않을 내용을 정확히 기술할 것
- 변경관련 동사를 사용할 것 - "transform" 대신 "change", "replace" 를 사용할 것
템플릿 모범 사례
객체 변형
"Change [object] to [new state], keep [content to preserve] unchanged"
스타일 복제:
"Transform to [specific style], while maintaining [composition/character/other] unchanged"
배경 변경:
"Change the background to [new background], keep the subject in the exact same position and pose"
텍스트 편집:
"Replace '[original text]' with '[new text]', maintain the same font style"
요약 : 프롬프트를 구체적으로 입력할수록 좋습니다. Kontext는 상세한 명령을 매우 잘 이해하고 일관성을 유지하는 데 뛰어납니다. |
참고
5070ti 가 설치된 제 컴퓨터에서 생성시간은 1분 20초 정도됩니다. 그런데, 맨 위에 있는 [TeaCache] 노드를 활성화시키고 실행시키면 대략 35초 정도 소요됩니다. TeaCache를 사용하면 속도는 빠르나 이미지 품질이 약간 떨어질 수 있습니다. 따라서 먼저 TeaCache를 켜고 실행시킨 후, 구도가 마음에 드는 이미지를 사용해서 TeaCache 없이 실행시키는 것이 좋습니다. 위의 샘플의 경우에도 주인공 어깨가 완전히 돌아가지 않아서 여러 장을 생성한 후 하나를 선택한 것입니다.
그리고... ChatGPT나 Gemini와 마찬가지로, 동양인 얼굴은 일관성이 유지 안되는 경향이 있는 것 같습니다. 일관성이 가장 잘 유지되는 것은 AI로 생성된 이미지 같네요.
이미지 크기 변경
현재는 입력된 이미지를 [FluxKontextImageScale]노드를 통해서 Kontext용으로 가장 적절한 크기로 변환한 뒤 [KSampler] 노드에 latent_image에 입력했습니다. 이렇게 하면 입력된 이미지와 비슷한 종횡비로 유지된 이미지가 생성됩니다. 워크플로 가운데에 있는 [Preview Image]노드를 보시면 원본 이미지의 크기와 비교할 수 있습니다.
하지만 아래와 같이 이미지 종횡비를 바꾸고 싶다면, [CR SDXL Aspect Ratio]에서 [KSampler]노드로 직접 연결시키고 생성하시면 됩니다.
이상입니다.
이 글은 comfyui-examples의 글을 참고로하여 작성했습니다.
민, 푸른하늘
- ComfyUI로 설치 및 사용법 기초
- ComfyUI 투토리얼
- ComfyUI를 위한 유용한 정보
- ComfyUI와 SDXL 사용법(1) - 기초
- ComfyUI에서 ControlNet 사용법
- 편리한 ComfyUI 워크플로 모음
- LCM-LoRA - 초고속 스테이블 디퓨전
- Stable Video Diffusion(비디오 스테이블 디퓨전)