-
FLUX.2-klein-4B 모델을 이용해 텍스트나 이미지를 입력으로 이미지를 생성하는 순수 C 구현체
-
외부 의존성 없이 동작하며, 선택적으로 BLAS 또는 Metal 가속을 통해 최대 30배 속도 향상 가능
-
Qwen3-4B 텍스트 인코더가 내장되어 별도의 임베딩 계산 과정이 필요 없음
-
텍스트-이미지 및 이미지-이미지 변환을 모두 지원하며, 명령행 인터페이스와 C 라이브러리 API 제공
-
Python 런타임이나 PyTorch 없이도 실행 가능해, 경량 추론 환경과 오픈소스 AI 접근성 확대에 의미
프로젝트 개요
-
FLUX.2-klein-4B는 Black Forest Labs의 이미지 생성 모델로, 텍스트 프롬프트나 기존 이미지를 입력받아 새로운 이미지를 생성
- 전체 코드가 표준 C 라이브러리만으로 작성되어 있으며, MPS(Apple Metal) 및 BLAS(OpenBLAS) 가속을 선택적으로 지원
- 모델은 HuggingFace에서 약 16GB 용량으로 다운로드 가능하며, 구성 요소는 VAE(300MB) , Transformer(4GB) , Qwen3-4B 인코더(8GB) , Tokenizer로 구성
주요 기능
-
Zero dependencies: 외부 라이브러리 없이 독립 실행 가능
- BLAS 사용 시 약 30배 속도 향상, macOS에서는 Apple Accelerate, Linux에서는 OpenBLAS 사용 가능
-
Metal GPU acceleration: Apple Silicon 환경에서 자동 활성화
-
Text-to-image: 텍스트 프롬프트로 이미지 생성
-
Image-to-image: 기존 이미지를 프롬프트에 따라 변환
-
Integrated text encoder: Qwen3-4B 인코더 내장, 외부 임베딩 불필요
-
Memory efficient: 인코딩 후 자동으로 인코더 메모리 해제, 약 8GB 절감
사용 예시
- 텍스트에서 이미지 생성
./flux -d flux-klein-model -p "A fluffy orange cat sitting on a windowsill" -o cat.png
- 이미지 변환
./flux -d flux-klein-model -i photo.png -o painting.png -p "oil painting style" -t 0.7
-
-t 값은 변환 강도를 제어하며, 0.0은 원본 유지, 1.0은 완전 재생성
모델 구조 및 성능
-
Transformer: 5개의 더블 블록과 20개의 싱글 블록, 3072 히든 차원, 24 어텐션 헤드
-
VAE: AutoencoderKL, 128 잠재 채널, 8배 공간 압축
-
Text Encoder: Qwen3-4B, 36층, 2560 히든 차원
-
추론 단계: 4단계 샘플링으로 고품질 결과 생성
-
메모리 요구량
- 텍스트 인코딩: 약 8GB
- 디퓨전: 약 8GB
- 최대 피크: 16GB (인코더 해제 전)
-
성능 벤치마크 (Apple M3 Max, 128GB RAM)
- 512×512: MPS 49.6초, BLAS 51.9초, PyTorch MPS 5.4초
- 256×256: MPS 32.4초, BLAS 29.7초, PyTorch MPS 3.0초
- 64×64: MPS 25.0초, BLAS 23.5초, PyTorch MPS 2.2초
- 순수 C 백엔드는 매우 느리며 테스트용으로만 적합
빌드 및 실행
- 백엔드 선택
-
make mps: macOS Apple Silicon (가장 빠름)
-
make blas: Intel Mac 또는 Linux (OpenBLAS 필요)
-
make generic: 순수 C, 의존성 없음 (느림)
- 모델 다운로드
pip install huggingface_hub
python download_model.py
- 출력 해상도는 최대 1024×1024, 최소 64×64, 16의 배수 권장
C 라이브러리 API
-
모델 로드 및 해제
-
flux_load_dir(path) / flux_free(ctx)
-
이미지 생성 및 변환
-
flux_generate(ctx, prompt, params)
-
flux_img2img(ctx, prompt, input, params)
-
이미지 입출력
-
flux_image_load(path) / flux_image_save(img, path)
-
유틸리티
-
flux_set_seed(seed)로 재현성 확보
-
flux_get_error()로 오류 메시지 확인
-
flux_release_text_encoder(ctx)로 메모리 수동 해제 가능
라이선스 및 기타 정보
-
MIT 라이선스로 공개
- 저장소 언어 구성: C 93.9% , Objective-C 3.5% , Makefile 1.7% , Python 0.9%
-
별점 446개, 포크 20개로 활발한 커뮤니티 관심 확보