Files
2nd/10_Wiki/Topics/AI_and_ML/오픈소스 기반 맞춤형 이미지 생성 워크플로우 구축.md
T
2026-05-10 22:08:15 +09:00

6.1 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-오픈소스-기반-맞춤형-이미지-생성-워크플로우-구축 오픈소스 기반 맞춤형 이미지 생성 워크플로우 구축 10_Wiki/Topics verified self
OSS Image Gen Workflow
ComfyUI Pipeline
Local Diffusion Stack
none A 0.9 applied
diffusion
comfyui
flux
lora
image-gen
oss
2026-05-10 pending
language framework
python ComfyUI-FLUX

오픈소스 기반 맞춤형 이미지 생성 워크플로우 구축

매 한 줄

"매 base model + LoRA + ControlNet + upscaler = production stack". 2026 기준 FLUX.1 (Black Forest Labs) 가 SDXL 을 대체하며 OSS image gen 의 base, ComfyUI 가 node-based orchestration 의 표준. 8GB VRAM 부터 가능, 24GB 이상에서 batch + LoRA stacking 자유.

매 핵심

매 stack 구성

  • Base model: FLUX.1-dev (12B), FLUX.1-schnell (4-step), SD3.5-Large (8B), SDXL (legacy).
  • Adapter: LoRA (1-100MB) · IPAdapter (style transfer) · ControlNet (pose/depth/canny).
  • Upscaler: 4x-UltraSharp, RealESRGAN, SUPIR (face-aware).
  • Orchestrator: ComfyUI (node graph) · InvokeAI (UX) · A1111 (legacy webui).

매 hardware tier

  • 8GB (RTX 3060/4060): schnell + GGUF Q4 · 1024² · 30s/img.
  • 16GB (4080/4090): dev fp8 · LoRA stack · 60s/img.
  • 24GB+ (4090/5090): dev fp16 · 2K render · ControlNet 동시 3개.
  • Apple Silicon (M3/M4 32GB+): MLX-FLUX · DiffusionKit.

매 응용

  1. 브랜드 일관 캐릭터 — character LoRA + IPAdapter face.
  2. 제품 사진 — ControlNet depth + product photo LoRA.
  3. 컨셉 아트 — style LoRA + 4-stage upscale (1K→4K).

💻 패턴

ComfyUI 기본 FLUX workflow (Python API)

import json, urllib.request

workflow = {
  "3": {"class_type": "KSampler", "inputs": {
    "seed": 42, "steps": 20, "cfg": 3.5,
    "sampler_name": "euler", "scheduler": "simple",
    "model": ["10", 0], "positive": ["6", 0],
    "negative": ["7", 0], "latent_image": ["5", 0]
  }},
  "5": {"class_type": "EmptyLatentImage",
        "inputs": {"width": 1024, "height": 1024, "batch_size": 1}},
  "6": {"class_type": "CLIPTextEncode",
        "inputs": {"text": "studio portrait, soft light", "clip": ["10", 1]}},
  "10": {"class_type": "CheckpointLoaderSimple",
         "inputs": {"ckpt_name": "flux1-dev.safetensors"}}
}
urllib.request.urlopen("http://127.0.0.1:8188/prompt",
  data=json.dumps({"prompt": workflow}).encode())

LoRA stacking (캐릭터 + 스타일)

# ComfyUI LoraLoader 노드 직렬화
"15": {"class_type": "LoraLoader", "inputs": {
  "model": ["10", 0], "clip": ["10", 1],
  "lora_name": "char_alice_v3.safetensors",
  "strength_model": 0.85, "strength_clip": 1.0
}},
"16": {"class_type": "LoraLoader", "inputs": {
  "model": ["15", 0], "clip": ["15", 1],
  "lora_name": "watercolor_style.safetensors",
  "strength_model": 0.55, "strength_clip": 0.7
}}

LoRA 학습 (kohya-ss FLUX)

accelerate launch sd-scripts/flux_train_network.py \
  --pretrained_model_name_or_path flux1-dev.safetensors \
  --train_data_dir ./dataset/alice \
  --output_dir ./out --output_name char_alice_v3 \
  --network_module networks.lora_flux \
  --network_dim 32 --network_alpha 16 \
  --resolution 1024 --train_batch_size 1 \
  --gradient_accumulation_steps 4 \
  --learning_rate 1e-4 --max_train_steps 1500 \
  --mixed_precision bf16 --save_precision bf16 \
  --cache_text_encoder_outputs --cache_latents

ControlNet (pose-guided)

"20": {"class_type": "ControlNetLoader",
       "inputs": {"control_net_name": "flux-controlnet-pose-v3.safetensors"}},
"21": {"class_type": "LoadImage", "inputs": {"image": "pose_ref.png"}},
"22": {"class_type": "ControlNetApply", "inputs": {
  "conditioning": ["6", 0], "control_net": ["20", 0],
  "image": ["21", 0], "strength": 0.65
}}

SUPIR upscale (face-aware 4x)

"30": {"class_type": "SUPIR_Upscale", "inputs": {
  "image": ["8", 0], "scale": 4,
  "model": "SUPIR-v0F.ckpt",
  "denoise": 0.35, "cfg_scale": 4.0,
  "color_fix_type": "Wavelet"
}}

Batch automation (재현 가능)

import itertools, hashlib
seeds   = [42, 1234, 7777]
prompts = ["forest", "city night", "studio"]
for p, s in itertools.product(prompts, seeds):
    hsh = hashlib.md5(f"{p}-{s}".encode()).hexdigest()[:8]
    run_workflow(prompt=p, seed=s, save_as=f"out_{hsh}.png")

MLX-FLUX (Apple Silicon)

pip install mflux
mflux-generate --model dev \
  --prompt "isometric tiny city, paper craft" \
  --steps 20 --seed 42 --quantize 8 \
  --output out.png

매 결정 기준

상황 Approach
8GB VRAM, 빠른 iteration FLUX.1-schnell GGUF Q4.
캐릭터 일관성 필요 character LoRA + IPAdapter.
제품 컴포지션 강제 ControlNet depth/canny.
4K 출력 1K base → SUPIR 4x.
Mac M3/M4 MLX-FLUX (mflux).

기본값: FLUX.1-dev fp8 · ComfyUI · 1024² · 20 steps · cfg 3.5 · LoRA 0.7-0.9.

🔗 Graph

🤖 LLM 활용

언제: ComfyUI workflow JSON 작성, LoRA 학습 스크립트 튜닝, prompt engineering. 언제 X: real-time inference (< 1s) — closed API (Midjourney/DALL-E) 가 여전히 지연 면 우위.

안티패턴

  • LoRA strength 1.0 fixed: overcooked 결과. 0.6-0.85 range 가 sweet spot.
  • CFG 7+ on FLUX: artifact. FLUX 는 3-4가 정상 (SDXL 의 7과 다름).
  • No seed control: 재현 불가능 → A/B 비교 불능.
  • VAE mismatch: SDXL VAE 를 FLUX 에 사용 시 색 깨짐.

🧪 검증 / 중복

  • Verified (Black Forest Labs FLUX docs, ComfyUI repo, kohya-ss flux_train).
  • 신뢰도 A — 2024-2026 OSS image gen 의 표준.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — OSS image gen workflow (FLUX/ComfyUI)