~14 min · diffusion, image-generation, stable-diffusion
Level 0호기심
0 XP0/51 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete
Apple Silicon의 확산 모델
MLX에서는 Stable Diffusion 변형, 많은 작업에서 품질을 이끄는 FLUX, 커뮤니티 모델을 로컬로 생성할 수 있어. 아래 명령이 실제로 부르는 패키지는 mflux야. 더 오래된 mlx-examples/stable_diffusion과 함께 통합 메모리를 직접 겨냥한 구현이고. mflux는 FLUX 전용 포장이 아니라 런너로 봐야 해. 이 레슨을 처음 쓴 뒤로 FLUX.1 말고도 여러 모델 계열용 콘솔 스크립트가 붙었고, 아빠가 이걸 읽을 때쯤엔 더 늘어 있을 거야. 그러니 목록을 외우지 말고 목록이 어디 있는지를 외워. pip show -f mflux를 돌리면 지금 깔린 버전이 주는 mflux-generate-* 진입점이 전부 나와. 그게 이 기계에서 오늘 기준으로 정확한 답이야. 레슨 5가 영상·음악에 적용한 원칙이 여기도 그대로야. 오래 가는 건 흐름(모델 고르고, 불러오면서 양자화하고, 생성하고, 저장하고)이고 모델 이름은 재고 목록일 뿐이야. 알아둘 만한, 그리고 이거랑 헷갈리면 안 되는 MLX 스택이 하나 더 있어. argmaxinc이 MLX 포맷 FLUX 가중치를 내놓고 그걸 돌리는 자기 런너 DiffusionKit도 같이 내놔. 이 레슨은 그 스택을 아예 안 건드려. mflux는 Black Forest Labs 원본 FLUX 가중치를 받아서 자기가 양자화하거든.
빠른 길은 black-forest-labs/FLUX.1-schnell이야. 4단계로 생성하는 모델이고 mflux가 첫 실행 때 받아와. Schnell은 독일어로 빠르다는 뜻이고, 오래된 Stable Diffusion보다 훨씬 적은 단계로 높은 품질을 내.
예상 생성 시간
정확한 시간은 칩 세대가 정해. 'M-Pro' 한 단어가 M1 Pro부터 M4 Pro까지 네 세대를 덮으니 숫자 하나로 말하면 거짓말이 돼. 공개된 실측을 짚으면, mflux 저장소에 보고된 M4 Max(128GB)는 1024×1024 schnell 2단계 생성에 약 15초(모델 로드까지 합치면 40초 가까이)였고, 예전 README 표의 M3 Pro는 4비트 파이프라인으로 30초쯤이었어. 4단계면 대략 그 두 배를 잡으면 되고, 오래됐거나 하위 등급 칩이면 한 장에 1분쯤 보는 게 현실적이야. 최신 상위 칩이면 GPU를 빌리지 않고도 스케치하듯 반복할 만해. 지금 쓰는 Mac의 숫자는 아래 명령을 한 번 돌려보면 바로 나와.
MLX와 Core ML은 작업 흐름으로 골라
속도 비교는 모델, 버전, 최적화 상태에 따라 결과가 갈려서 어느 쪽이 빠르다고 못 박기 어려워. 그러니 결정은 속도가 아니라 작업 방식이 해.
MLX — Python 중심이고 스크립트와 파이프라인에 넣기 쉬워. 샘플러를 완전히 통제하고 양자화별 비교를 할 연구·자동화에 맞아.
Core ML — Swift 중심이고 macOS·iOS 앱에 넣기 쉬워. App Store 배포와 기기 안 개인정보 보호가 필요한 기능에 맞아.
호스팅 API와 로컬 생성
사용자 한 명이 가끔 상용급 이미지를 만든다면 Replicate, fal, OpenAI 이미지 API가 놀고 있는 Mac을 유지하는 것보다 한 장당 쌀 수 있어. 로컬은 개인정보와 망 분리가 중요하거나, 많이 생성해 비용이 쌓이거나, 모델과 샘플러를 완전히 통제해야 할 때 이겨. 가끔이면 API, 매일 쓰는 창작 도구라면 Mac이 유리해질 수 있어.
Code
FLUX schnell (MLX) 로 한 이미지 생성·bash
# Run with mflux via its console script. (`python -m mflux.generate`
# was the old entry point — src/mflux/generate.py was removed 2025-12,
# so the module form no longer exists.)
# black-forest-labs/FLUX.1-schnell is a GATED repo:
# accept its terms on the Hugging Face page while logged in and have a
# token in place (`hf auth login`, or HF_TOKEN) or the first run
# 401s. That first run then pulls the full bf16 weights (~34 GB) into
# ~/.cache/huggingface/hub/; --quantize 4 quantizes them on the fly as
# they load. As written this command fetches no pre-quantized artifact —
# pre-quantized copies do exist on Hugging Face, and `mflux-save` writes
# one locally.
mflux-generate \
--model schnell \
--quantize 4 \
--steps 4 \
--width 1024 --height 1024 \
--seed 42 \
--prompt "A red panda data scientist debugging code at 3am, anime style, soft lighting." \
--output ./red-panda.png
# Wall-clock varies by chip GENERATION — published reference points:
# M4 Max (128 GB) : ~15 s generation for 1024x1024 schnell at 2 steps
# (~38 s total with model load) — mflux issue #92
# M3 Pro : ~30 s at 4-bit — mflux's earlier README table
# Expect roughly 2x the 2-step time at --steps 4, and budget about a
# minute per image on older or lower-tier chips.
같은 이미지를 프로그래밍적으로 생성·python
# Verified against mflux 0.18 — the current programmatic API.
# (Older tutorials show `Flux1.from_alias(...)` + `Config(...)`;
# that shape predates 0.18 and no longer imports.)
from mflux.models.common.config.model_config import ModelConfig
from mflux.models.flux.variants.txt2img.flux import Flux1
flux = Flux1(
quantize=4,
model_config=ModelConfig.schnell(),
)
image = flux.generate_image(
seed=42,
prompt="A red panda data scientist debugging code at 3am, anime style.",
num_inference_steps=4,
height=1024,
width=1024,
)
image.save("red-panda.png", export_json_metadata=True)
같은 시드와 서로 다른 프롬프트 셋으로 4단계 FLUX schnell 이미지를 세 장 만들어. 다음에는 같은 프롬프트와 서로 다른 시드 셋으로 만들어. 같은 시드가 반복 가능한 이미지를 주는 방식과 프롬프트가 구도를 바꾸는 방식을 보고, 현재 Mac의 생성 시간이 반복 창작에 충분한지 두 문장으로 적어.
Progress
Progress is local-only — sign in to sync across devices.