Mac 本地部署 AI 生图:从零跑通 FLUX 与 Z-Image 的完整步骤(附完整脚本)

各位看官,这篇不是讲"我怎么折腾本地生图"的流水账,而是一份手把手的部署指南。目标只有一个:你照着下面一步一步敲命令,最后能在自己 Mac 上跑出第一张本地生成的图,不依赖任何云端服务、不花一分钱。

我用的是 Apple Silicon(M 系列芯片)+ MLX 推理引擎这条路线。它没有 N 卡、不需要装 CUDA、不需要编译任何 C++,纯 pip install 就能跑。如果你也在用 Mac,这篇能直接复用。

先说清楚这套方案的两个引擎:

  • FLUX.1-schnell:画质好、生态成熟,但它只认英文,且是 HuggingFace 门禁仓库(需登录同意许可)。
  • Z-Image Turbo:阿里通义出品,原生支持中文提示词,公开镜像免登录,日常中文出图更省事。

二者共用同一个底层引擎 mflux(纯 MLX 推理),装一次环境,两个都能用。下面从最基础的开始。

说明:本文正文里的命令全部可以直接复制运行,不依赖任何外部文件。如果你嫌手动敲命令麻烦,文末「附录:配套脚本」把这些都封装成了现成脚本,整包复制保存即可一键使用。

在这里插入图片描述

一、先确认你的机器能不能跑

这套方案只认 Apple Silicon,Intel Mac 跑不了 MLX。先查三项:

# 芯片与内存
system_profiler SPHardwareDataType | grep -E "Chip|Memory"

# Python 版本(需要 3.10+)
python3 --version

# Xcode 命令行工具(编译部分依赖需要,多数情况已装)
xcode-select -p

# Homebrew(用来装 Python)
brew --version

前置条件我整理成一张表,对着查缺补漏:

项目 要求 不满足时的处理
芯片 Apple M1 / M2 / M3 / M4 Intel Mac 不适用本方案
内存 16GB 起步,64GB 很舒服 4bit 量化下 8–12GB 够用,16GB 机型能跑
系统 macOS(较新版本) 保持系统更新即可
Python 3.10 及以上 brew install python@3.12
Xcode CLT 已安装 终端执行 xcode-select --install
Homebrew 已安装 按 brew 官网一行命令装

如果 xcode-select -p 报"command line tools are not installed",先跑:

xcode-select --install

Python 不够新就:

brew install python@3.12

确认 python3 --version 输出 3.10+ 就可以往下走了。

二、十分钟装好推理引擎(核心步骤)

这是最关键的一步。我们的做法是在自己目录下建一个虚拟环境(venv),再用它装 mflux——用 venv 是必须的,因为新版 macOS 禁止直接往系统 Python 里塞包(PEP 668),裸装会直接报错,后面「八、常见报错」一节会专门讲。

下面三步就是全部安装过程,直接逐行复制到终端执行即可:

# 1. 建虚拟环境(绕过 macOS 的 PEP 668 系统保护,不污染系统 Python)
python3 -m venv ~/ai-tools/venv

# 2. 进入虚拟环境
source ~/ai-tools/venv/bin/activate

# 3. 在虚拟环境里装 mflux(Apple Silicon 原生 MLX 推理,预编译 wheel,不编译 C++)
python -m pip install --upgrade pip
python -m pip install mflux

注意 source ~/ai-tools/venv/bin/activate 之后,命令行前面会出现 (venv) 提示符,说明你已经在虚拟环境里了。后续所有 pip / mflux 命令都要先激活它。

想偷懒的话,可以把上面这三步存成一个 setup.sh(全文见文末附录一),以后一键重装:bash ~/ai-tools/setup.sh

装完验证一下,确认引擎真的就位:

source ~/ai-tools/venv/bin/activate
which mflux-generate        # 应输出 ~/ai-tools/venv/bin/mflux-generate
which mflux-generate-z-image-turbo   # Z-Image 子命令,后面会用到

两个命令路径都能打印出来,说明引擎装好了。

三、让 FLUX 能下载(HuggingFace 门禁)

FLUX.1-schnell 是 gated 仓库:HuggingFace 要求你先登录、并在仓库页面点同意许可,否则下载模型会直接报 401。这一步新手最容易卡住,照着做就行:

  1. 浏览器打开 https://huggingface.co/black-forest-labs/FLUX.1-schnell,登录后点页面上的 “Agree and access repository” 同意许可。
  2. 打开 https://huggingface.co/settings/tokens,新建一个 token:推荐选经典 “Read” 类型(最简单,可下所有你已授权仓库);如果选 Fine-grained,必须手动把 black-forest-labs/FLUX.1-schnell 设为可读,否则还是 401。
  3. 终端登录:
source ~/ai-tools/venv/bin/activate
hf auth login          # 粘贴刚才拿到的 token

token 会缓存在 ~/.cache/huggingface,以后不用每次登录。(注意:新版 HuggingFace 已经弃用 huggingface-cli login,统一用 hf auth login。)

Z-Image 的 4bit 预量化镜像(filipstrand/Z-Image-Turbo-mflux-4bit)是公开仓库,不需要这一步,直接能下。

四、跑出第一张 FLUX 图

环境就绪,跑第一张图。先激活 venv,再用 mflux-generate 直接生图:

source ~/ai-tools/venv/bin/activate
mflux-generate --model schnell \
  --prompt "a flat illustration of microservices architecture, blue tones" \
  --output ~/Downloads/first.png \
  --width 1024 --height 1024 --steps 4 --quantize 4 \
  --seed "$(date +%s)"

参数含义:--model schnell 指定模型;--prompt 提示词;--output 输出路径;--width/--height 尺寸;--steps 4 是 schnell 够用的步数(2~4 步即可,快);--quantize 4 是 4bit 量化(体积约一半,博客配图够用);--seed 用时间戳保证每次不同。

嫌每次敲这么长嫌烦,文末附录二的 gen.sh 把这堆前置(激活 venv、检查登录、离线加固、中文拦截)都封装好了,懒人直接跑:
bash ~/ai-tools/gen.sh "a flat illustration of microservices architecture, blue tones" ~/Downloads/first.png 1024 1024 4

首次运行会先下载模型(schnell 4bit 约 10GB),请耐心等它跑完,之后就走本地缓存,再生成不用联网。看到进度条跑完和一张图片路径,就成功了。

一个必须提醒的坑:FLUX 的文本编码器(T5)只训练过英文,直接喂中文会被整句忽略,生成出来的图往往跟你描述毫无关系(我当初就得到过一张莫名其妙的风景画)。所以 FLUX 这条线,提示词一定要用英文。博客配图可以在英文里加 flat vector design / minimalist / blue and orange accents 这类词,效果很稳;避开 photo / realistic / blurry

五、(可选)让 FLUX 也能吃中文:本地翻译层

如果你跟我一样懒得每次把中文翻成英文,可以加一层本地翻译小模型——用 Qwen2.5-1.5B 在本地把中文提示词翻成英文,再喂给 FLUX。全程离线,不联网、不上传。

先把翻译环境装上(独立 venv,和 mflux 互不干扰),还是三步:

# 1. 建翻译专用虚拟环境
python3 -m venv ~/ai-tools/venv-translate
# 2. 激活
source ~/ai-tools/venv-translate/bin/activate
# 3. 装 mlx-lm(Apple MLX 原生,预编译 wheel,免编译)
python -m pip install --upgrade pip
python -m pip install mlx-lm

翻译模型 mlx-community/Qwen2.5-1.5B-Instruct-4bit 是公开仓库,无需登录,首次翻译时自动下载(约 1GB)。翻译程序本身见文末附录四 translate.py,保存为 ~/ai-tools/translate.py 即可。用法:

source ~/ai-tools/venv-translate/bin/activate
python ~/ai-tools/translate.py "微服务架构图,蓝色调,扁平插画"
# 输出纯英文提示词,例如: a microservices architecture diagram, blue color scheme, flat illustration

然后把这个英文结果喂给 FLUX 生图,串起来就是:

source ~/ai-tools/venv-translate/bin/activate
EN=$(python ~/ai-tools/translate.py "微服务架构图,蓝色调,扁平插画")

source ~/ai-tools/venv/bin/activate
mflux-generate --model schnell \
  --prompt "$EN" \
  --output ~/Downloads/first_zh.png \
  --width 1024 --height 1024 --steps 4 --quantize 4 \
  --seed "$(date +%s)"

嫌手动串两条命令麻烦,文末附录五 translate.sh + 附录六 gen_zh.sh 把"翻译→生图"一条龙封装好了,直接 bash ~/ai-tools/gen_zh.sh "中文提示词" 输出路径 宽 高 步数

这一步是可选的。如果你主要用中文出图,直接用下一节的 Z-Image 更省事,翻译层可以跳过。

六、更省事:换 Z-Image Turbo(原生中文,免翻译)

Z-Image Turbo 是通义开源的模型,原生支持中文提示词,不需要任何翻译层。日常中文出图我基本只用它。

最简用法——直接把中文当提示词,用 mflux-generate-z-image-turbo 生图:

source ~/ai-tools/venv/bin/activate
mflux-generate-z-image-turbo \
  --model filipstrand/Z-Image-Turbo-mflux-4bit \
  --prompt "微服务架构图,API 网关与数据库,蓝色调,扁平插画" \
  --output ~/Downloads/zh.png \
  --width 720 --height 480 --steps 9

默认 4bit 用的是 filipstrand/Z-Image-Turbo-mflux-4bit(约 5.9GB,公开免登录)。想更清晰就加 --quantize 8,会走官方 base 模型 Tongyi-MAI/Z-Image-Turbo 做运行时量化,代价是首次要下载约 21GB,之后走缓存:

source ~/ai-tools/venv/bin/activate
mflux-generate-z-image-turbo \
  --model Tongyi-MAI/Z-Image-Turbo \
  --quantize 8 \
  --prompt "微服务架构图,API 网关与数据库,蓝色调,扁平插画" \
  --output ~/Downloads/zh.png \
  --width 720 --height 480 --steps 9

常用选择我整理成一张表,对着选就行:

你想怎么出图 用哪条命令(核心差异)
中文,省事,默认够用 --model filipstrand/Z-Image-Turbo-mflux-4bit(免登录,约 5.9GB)
中文,要更清晰 --model Tongyi-MAI/Z-Image-Turbo --quantize 8(首跑约 21GB)
英文,画质好 mflux-generate --model schnell(见第四节,需 HF 登录)

嫌每次敲长命令麻烦,文末附录七 gen_zimg.sh 把这些封装成了支持 -p/-d/-f/-w/-h/-s/-q 参数的脚本,例如:
bash ~/ai-tools/gen_zimg.sh -p "微服务架构图,API 网关与数据库,蓝色调,扁平插画" -d ~/Downloads -f zh.png -w 720 -h 480

七、日常命令速查表

下面是这套本地生图流水线的结构示意,这张图本身就是用本地 Z-Image 生成的:

在这里插入图片描述

部署完之后,你日常只需要记住这几条原始命令(不需要任何脚本文件):

想做的事 命令
英文提示词生图(FLUX) source ~/ai-tools/venv/bin/activate && mflux-generate --model schnell --prompt "english prompt" --output ~/Downloads/out.png --width 1024 --height 1024 --steps 4 --quantize 4 --seed "$(date +%s)"
中文提示词生图(Z-Image,推荐) source ~/ai-tools/venv/bin/activate && mflux-generate-z-image-turbo --model filipstrand/Z-Image-Turbo-mflux-4bit --prompt "中文提示词" --output ~/Downloads/zh.png --width 720 --height 480 --steps 9
Z-Image 更清晰(8bit) 把上面 --model 换成 Tongyi-MAI/Z-Image-Turbo 并加 --quantize 8
FLUX 中文通道(需翻译层) 见第五节 translate.py 翻译后接 mflux-generate
下载慢换镜像 手动:export HF_ENDPOINT=https://hf-mirror.com(或脚本加 USE_MIRROR=1
重新登录 HuggingFace source ~/ai-tools/venv/bin/activate && hf auth login

博客配图我固定用 720×480,配合文章的 ./assets/ 相对引用。你换成自己的尺寸也行。

这篇的两张配图(本地生图流水线图、成本与隐私对比图)就是由上面这套本地 Z-Image 模型生成的——画风统一、图标能认,但你看不到任何文字,这正是本地轻量模型当前的能力边界(需要精致封面或精确文字时,仍建议上云端模型)。

八、卡住了?常见报错对照表

部署和早期使用最容易踩的坑,我列成对照表,照着查:

现象 / 报错 根因 解决办法
error: externally-managed-environment macOS PEP 668 禁止裸装系统 Python 用 venv(见第二节手动步骤),不要加 --break-system-packages 硬干
下载模型报 401 Unauthorized 没登录 / 没在仓库页点同意许可 / Fine-grained token 没授权该仓库 按第三节走 hf auth login,确认点过 Agree,token 用经典 Read 类型
ValueError: matmul 2560≠4096(8bit 路线) 第三方 8bit 镜像的文本编码器维度与当前 mflux 架构不符 改用官方 base Tongyi-MAI/Z-Image-Turbo + 运行时量化(--quantize 8),别用第三方预量化镜像
下载巨慢甚至超时 直连 HuggingFace 受限 手动 export HF_ENDPOINT=https://hf-mirror.com,或挂代理
本地调试改动"不生效"(AI 助手终端里跑命令时) 沙箱/代理限制出网,GitHub/HF 直连不通 第一次下载模型必须在本机自己的终端跑,缓存之后推理不需要网络
FLUX 生成出来是无关图(如风景) 提示词含中文,T5 不认 改英文;或走 Z-Image 原生中文

另外提醒一个历史弯路:早期我试过 stable-diffusion.cpp 的本地编译路线,要在 Apple Silicon 上编译一堆 C++,Xcode 工具链一升级就崩,纯属自讨苦吃。直接用 mflux(纯 MLX、pip 装、免编译)才是正道,本文整条路线都不碰编译。

九、磁盘与隐私账

最后算两笔账,让你心里有数。

磁盘占用(都是一次下载、之后走缓存):

组件 体积 说明
FLUX.1-schnell 4bit 约 10GB 8bit 全量约 31GB
Z-Image Turbo 4bit 约 5.9GB 8bit base 约 21GB
翻译模型 Qwen2.5-1.5B 约 1GB 可选,仅 FLUX 中文通道需要
默认推荐组合 约 17GB 4bit FLUX + 4bit Z-Image + 翻译

这 17GB 是磁盘缓存,不是内存。实际生图时内存只吃 8–12GB,16GB 机型也能跑,64GB 自然更宽裕。

隐私:模型缓存到本地后,可以在生图前手动设 export HF_HUB_OFFLINE=1 强制离线推理——提示词和生成的图片绝不会出本机(文末附录脚本已默认开启此项)。如果需要重下模型,设 HF_ALLOW_ONLINE=1 临时联网即可。翻译层也是纯本地推理,不上传任何内容。

本地出图与云端按张收费的对比,我用一张图概括:

在这里插入图片描述

小结

整套流程走下来,你在自己 Mac 上就拥有了一个免费、离线、可控的生图能力:

  1. 第二节:建 venv + pip install mflux(或 bash setup.sh);
  2. 第三节:登录 HuggingFace 过 FLUX 门禁;
  3. 第四节:英文出图用 mflux-generate --model schnell ...,中文省事用 mflux-generate-z-image-turbo ...
  4. 第五节翻译层(可选)。

最大的收获不是省了多少 API 费用,而是把一个原本"黑盒"的生图能力,变成了自己机器上可装、可调、可审计的一环。下次谁跟你说"本地跑不了大模型",把这套步骤拍他面前就够了。


附录:配套脚本(可直接复制使用)

正文里的命令已经能零依赖跑通全部流程。如果你嫌手动敲命令麻烦,下面把作者实际在用的封装脚本全文贴出,逐文件保存为 ~/ai-tools/ 下对应名字,chmod +x *.sh 即可。它们本质就是把正文里的手动步骤封装了一下,逻辑完全一致。

必装:附录一 setup.sh、附录二 gen.sh、附录七 gen_zimg.sh
可选(仅 FLUX 中文通道需要):附录三 setup_translate.sh、附录四 translate.py、附录五 translate.sh、附录六 gen_zh.sh

附录一:setup.sh(装 mflux 引擎)

#!/usr/bin/env bash
# ============================================================
#  本地生图一键搭建 (mflux —— 纯 Apple MLX,免编译、免 Xcode 工具链)
#  适用: Apple Silicon Mac (M1/M2/M3/M4),内存 16GB+ (你 64GB 绰绰有余)
#  用法: bash ~/ai-tools/setup.sh
#  说明: 在你自己的 Mac 终端 (Terminal.app / iTerm) 里运行即可。
#        mflux 通过 pip 安装的是【预编译的 MLX wheel】,不会编译任何 C++。
#        用 venv 规避 macOS 的 PEP 668 系统保护,不会污染系统 Python。
# ============================================================
set -euo pipefail

echo "=== 本地生图搭建 (mflux, 免编译) ==="

# ---------- 1. 检查 Python 版本 (mflux 需要 3.10+) ----------
echo ">> 检查 Python 版本 (需 3.10+) ..."
if ! command -v python3 >/dev/null 2>&1; then
  echo "✗ 没找到 python3,请先安装: brew install python@3.12"
  exit 1
fi
PYV=$(python3 -c 'import sys; print("%d.%d" % sys.version_info[:2])')
echo "   当前 Python: $PYV"
if python3 -c 'import sys; sys.exit(0 if sys.version_info >= (3,10) else 1)'; then
  echo "✓ 版本满足要求 (>= 3.10)"
else
  echo "✗ Python 过低,请先升级: brew install python@3.12,然后重跑本脚本"
  exit 1
fi

# ---------- 2. 建虚拟环境 (绕过 PEP 668 externally-managed 限制,最干净) ----------
VENV="$HOME/ai-tools/venv"
if [ -f "$VENV/bin/activate" ]; then
  echo "✓ venv 已存在: $VENV"
else
  echo ">> 创建虚拟环境: $VENV"
  python3 -m venv "$VENV"
fi

# shellcheck disable=SC1091
source "$VENV/bin/activate"

# ---------- 3. 在 venv 里安装 mflux (纯 MLX,预编译 wheel,不编 C++) ----------
echo ">> 安装 mflux (Apple Silicon 原生 MLX 推理,无需编译) ..."
python -m pip install --upgrade pip
python -m pip install mflux

echo ""
echo "✓ 安装完成!"
echo ""
echo "  ⚠️ 重要: FLUX 是 HuggingFace 门禁仓库(gated),首次生图前必须登录并同意许可,否则会报 401。"
echo "  一次性操作(在你的 Mac 浏览器 + 终端):"
echo "   1) 打开 https://huggingface.co/black-forest-labs/FLUX.1-schnell"
echo "      登录后点页面上的 “Agree and access repository” 同意许可"
echo "   2) 打开 https://huggingface.co/settings/tokens  新建 token:推荐经典 “Read” 类型;若用 Fine-grained 须把 black-forest-labs/FLUX.1-schnell 设为可读"
echo "   3) 终端运行:  source ~/ai-tools/venv/bin/activate && hf auth login   # 粘贴 token(huggingface-cli 已废弃)"
echo "      token 缓存在 ~/.cache/huggingface,之后不用每次登录"
echo ""
echo "  首次生图会自动下载模型 (schnell 8bit 约 10GB,请耐心),之后走本地缓存。"
echo "  下载默认直连 huggingface.co(已验证可连);若过慢可用镜像: USE_MIRROR=1 bash ~/ai-tools/gen.sh \"...\""
echo ""
echo "  试一张:  bash ~/ai-tools/gen.sh \"a flat illustration of microservices architecture, blue tones\""
echo "  (gen.sh 会自动激活 venv,并在未登录时给出指引)"
echo ""
echo "  想在当前 shell 直接用 mflux 命令:  source ~/ai-tools/venv/bin/activate"
echo ""
echo "  (注: 旧版 ~/ai-tools/stable-diffusion.cpp 编译路线已弃用,可删)"

附录二:gen.sh(FLUX 英文生图封装)

#!/usr/bin/env bash
# ============================================================
#  本地生图封装脚本 (mflux —— 免编译)
#  用法:
#    bash ~/ai-tools/gen.sh "提示词"
#    bash ~/ai-tools/gen.sh "提示词" 输出路径.png
#    bash ~/ai-tools/gen.sh "提示词" 输出路径.png 宽 高 步数
#  示例:
#    bash ~/ai-tools/gen.sh "a flat illustration of microservices architecture, blue tones" \
#         "$HOME/Documents/Blogs/posts/assets/arch.png" 1024 1024 4
#
#  说明: 默认用 Flux.1-schnell (2~4 步即可,快),4bit 量化 (体积小、够用)。
#        脚本会自动激活 ~/ai-tools/venv,无需手动处理 Python 环境。
#        FLUX 是 HuggingFace 门禁仓库(gated),首次使用前必须登录并同意许可,见下方检查。
#        博客配图建议加: flat vector design / minimalist / white background
#        配色词用 blue and orange accents 之类效果出彩;避开 photo/realistic/blurry。
# ============================================================
set -euo pipefail

# 隐私加固: 关闭 HuggingFace 匿名遥测(不含提示词/图片内容, 仅匿名使用统计)
export HF_HUB_DISABLE_TELEMETRY=1
# 若 FLUX 模型已缓存, 强制离线推理: 模型就绪后, 提示词与生成的图片绝不会出本机
# (需重新下载模型时, 设 HF_ALLOW_ONLINE=1 或临时删掉缓存目录即可联网)
FLUX_CACHE="$HOME/.cache/huggingface/hub/models--black-forest-labs--FLUX.1-schnell"
if [ -d "$FLUX_CACHE" ] && [ "${USE_MIRROR:-0}" != "1" ] && [ -z "${HF_ALLOW_ONLINE:-}" ]; then
  export HF_HUB_OFFLINE=1
fi

# 下载源: 默认直连 huggingface.co(已登录即可正常下载门禁模型)。
# 若直连过慢,可临时改用国内镜像: USE_MIRROR=1 bash ~/ai-tools/gen.sh "..."
if [ "${USE_MIRROR:-0}" = "1" ]; then
  export HF_ENDPOINT="https://hf-mirror.com"
  echo "   (本次使用镜像 hf-mirror.com 下载)"
fi

VENV="$HOME/ai-tools/venv"
if [ ! -f "$VENV/bin/activate" ]; then
  echo "✗ 未找到 venv,请先运行: bash ~/ai-tools/setup.sh"
  exit 1
fi
# shellcheck disable=SC1091
source "$VENV/bin/activate"

if ! command -v mflux-generate >/dev/null 2>&1; then
  echo "✗ venv 里没有 mflux-generate,请重跑: bash ~/ai-tools/setup.sh"
  exit 1
fi

# ---- FLUX 是 HuggingFace 门禁仓库(gated),必须先登录并同意许可才能下载 ----
# 以 token 缓存文件 / 环境变量判断登录状态(比 CLI 子命令更可靠;
# 新版 huggingface_hub 已弃用 huggingface-cli,改用 hf)
LOGGED_IN=0
if [ -n "${HF_TOKEN:-}" ] || [ -f "$HOME/.cache/huggingface/token" ]; then
  LOGGED_IN=1
fi
if [ "$LOGGED_IN" -eq 0 ]; then
  echo "✗ 尚未登录 HuggingFace:FLUX 模型为门禁仓库,需登录才能下载。"
  echo ""
  echo "  只需做一次(在你的 Mac 浏览器 + 终端):"
  echo "   1) 打开 https://huggingface.co/black-forest-labs/FLUX.1-schnell"
  echo "      登录后点页面上的 “Agree and access repository” 同意许可"
  echo "   2) 打开 https://huggingface.co/settings/tokens"
  echo "      新建 token:推荐选经典 “Read” 类型(最简单,可下所有已授权仓库)。"
  echo "      若用 Fine-grained,必须在权限里把 black-forest-labs/FLUX.1-schnell 设为可读(或选 All repositories),否则仍会 401。"
  echo "   3) 终端运行:"
  echo "        source ~/ai-tools/venv/bin/activate"
  echo "        hf auth login             # 粘贴上面拿到的 token"
  echo "      token 会缓存在 ~/.cache/huggingface,之后不用每次登录"
  echo ""
  echo "  完成后重跑本脚本即可。"
  exit 1
fi

PROMPT="${1:?用法: gen.sh \"提示词\" [输出路径] [] [] [步数] [量化]}"
# ---- FLUX 文本编码器(T5)只理解英文;中文会被忽略,生成无关图(如风景) ----
if [[ "$PROMPT" =~ [一-龥] ]] && [ "${ALLOW_CJK:-0}" != "1" ]; then
  echo "✗ 检测到中文提示词:FLUX 的 T5 文本编码器仅训练于英文,中文会被忽略,"
  echo "   生成的图往往与描述无关(你之前就得到了一张风景画)。"
  echo "   请改为英文后重跑,例如:"
  echo "     bash gen.sh \"a tall white woman with long blonde hair, wearing a bikini, sitting on a chair, smiling, eating an apple\""
  echo "   若确实需要强制用中文跑(多半会失败),可: ALLOW_CJK=1 bash gen.sh \"中文...\""
  exit 1
fi
OUT="${2:-$HOME/Documents/Blogs/posts/assets/gen_$(date +%Y%m%d_%H%M%S).png}"
W="${3:-1024}"; H="${4:-1024}"; STEPS="${5:-4}"
# 量化等级 (第 6 个参数 或 环境变量 MF_Q 可改):
#   4 = 约一半体积、更快,博客概念/插画配图完全够用 (默认)
#   8 = 质量更好但体积约翻倍; 2/3 = 更小更快但略糊
QUANT="${MF_Q:-${6:-4}}"

mkdir -p "$(dirname "$OUT")"
if [ "${QUIET:-0}" != "1" ]; then
  echo ">> 生成中: $OUT"
  echo "   prompt: $PROMPT"
  echo "   quant: $QUANT  (schnell 用 ${STEPS} 步;首次会先下载模型,之后走本地缓存)"
fi
# schnell 用 2~4 步足够;量化等级见上面 QUANT(默认 4,体积约一半)。seed 用时间戳保证每次不同。
# 注意: QUIET 仅抑制本脚本自己的提示三行; mflux 的生图进度条照常输出, 便于观察生成进度。
mflux-generate --model schnell --prompt "$PROMPT" \
  --output "$OUT" --width "$W" --height "$H" --steps "$STEPS" \
  --seed "$(date +%s)" -q "$QUANT"
echo "✓ 完成: $OUT"

附录三:setup_translate.sh(装翻译环境,可选)

#!/usr/bin/env bash
# ============================================================
#  本地翻译小模型环境搭建 (mlx-lm —— Apple MLX 原生, 免编译)
#  用途: 把中文提示词翻译成 FLUX 看得懂的英文提示词。
#  用法:
#    bash ~/ai-tools/setup_translate.sh
#    INSTALL_DIR=~/ai-tools bash ~/ai-tools/setup_translate.sh   # 自定义安装目录
#
#  说明:
#    - 新建独立 venv (venv-translate), 与 mflux 的 venv 互不干扰。
#    - 装 mlx-lm (预编译 wheel, 不编任何 C++)。
#    - 翻译模型 (Qwen2.5-1.5B-Instruct-4bit) 公开仓库, 无需 HF 登录,
#      首次翻译时由 mlx_lm 自动从 HuggingFace 拉取 (~1GB)。
# ============================================================
set -euo pipefail

INSTALL_DIR="${INSTALL_DIR:-$HOME/ai-tools}"
VENV="$INSTALL_DIR/venv-translate"

PYTHON_BIN="$(command -v python3 || true)"
[ -z "$PYTHON_BIN" ] && { echo "✗ 找不到 python3, 请先安装 Python 3.10+"; exit 1; }

echo ">> 创建翻译 venv: $VENV"
if [ ! -d "$VENV" ]; then
  python3 -m venv "$VENV"
fi
# shellcheck disable=SC1091
source "$VENV/bin/activate"

echo ">> 安装 mlx-lm (Apple MLX 原生, 预编译 wheel, 免编译)..."
pip install --upgrade pip >/dev/null 2>&1 || true
pip install mlx-lm

echo ""
echo "✓ 翻译环境就绪。"
echo "  默认模型: mlx-community/Qwen2.5-1.5B-Instruct-4bit (约 1GB, 首次翻译自动下载, 公开仓库无需登录)。"
echo "  想要更小可设: TRANSLATE_MODEL=mlx-community/Qwen2.5-0.5B-Instruct-4bit"
echo ""
echo "  试试翻译: bash $INSTALL_DIR/translate.sh \"穿比基尼的白人高个子长发金发美女坐在一张椅子上微笑着吃苹果\""
echo "  或直接生图: bash $INSTALL_DIR/gen_zh.sh \"上面那句中文\""

附录四:translate.py(中文→英文翻译程序,可选)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
本地中文 → 英文图像提示词翻译 (mlx-lm + Qwen2.5-Instruct)。
走 chat template, 比裸续写更稳定; 输出纯英文、单行, 直接喂给 mflux。
模型首次运行由 mlx_lm.load 自动下载 (公开仓库, 无需登录)。

兼容性说明:
不同 mlx-lm 版本对采样参数的关键字名 (temp / temperature / top_p) 与
底层 generate_step 的签名变化极大, 直接传极易触发 TypeError。这里统一
不传任何采样参数, 使用库默认的贪心解码 (temperature=0), 对"提示词翻译"
这种任务反而更稳定可控, 且不挑版本。

健壮性说明:
小模型 (Qwen2.5-1.5B) 偶尔会 code-switch, 在英文里夹带中文/日文等 CJK
字符。这里做了两件事:
  1) system prompt 明确禁止输出任何 CJK 字符;
  2) 生成后做 CJK 自检, 若仍残留, 把当前结果回喂模型, 要求改写成纯英文,
     最多重试 2 次。仍残留则原样返回, 交由上游 (gen_zh.sh) 决定放行/告警。
"""
import os
import re
import sys

try:
    from mlx_lm import load, generate
except ImportError:
    sys.stderr.write("✗ 无法导入 mlx_lm, 请先运行 setup_translate.sh\n")
    sys.exit(1)

# 中日韩字符范围 (CJK 统一表意文字 + 日文平/片假名 + 韩文音节)
CJK_RE = re.compile(r"[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]")


def generate_text(model, tokenizer, messages, max_tokens=200):
    """套 chat template 得到 token ids, 再交给 generate。

    关键: 传 list[int] 而非 str, 避免 generate 内部二次套模板。
    """
    prompt_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
    try:
        out = generate(model, tokenizer, prompt_ids, max_tokens=max_tokens)
    except TypeError:
        # 极老版本 generate 签名不同, 兜底走 stream_generate
        from mlx_lm import stream_generate

        parts = []
        for resp in stream_generate(model, tokenizer, prompt_ids, max_tokens=max_tokens):
            if isinstance(resp, str):
                parts.append(resp)
            elif hasattr(resp, "text"):
                parts.append(resp.text)
            elif isinstance(resp, (list, tuple)):
                parts.append(resp[0])
        out = "".join(parts)
    if isinstance(out, list):
        out = "".join(out)
    return out.strip()


def clean(text):
    """后处理: 去首尾引号/空白, 取首行 (图像 prompt 单行更稳定)。"""
    text = text.strip().strip('"').strip("'").strip()
    if text:
        text = text.splitlines()[0].strip()
    return text


SYSTEM_PROMPT = (
    "You are a professional image-prompt translator for a FLUX image generator. "
    "Translate the user's Chinese text into a concise, vivid English image-generation "
    "prompt. Use noun+adjective+action phrasing, comma-separated, no full sentences. "
    "CRITICAL: Output ONLY English. NEVER use Chinese, Japanese, Korean or any CJK "
    "characters in your output. No explanations, no quotes, no 'English:' prefix."
)


def main() -> None:
    cn = sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read().strip()
    if not cn:
        sys.stderr.write("ERROR: 输入为空, 请传入中文提示词\n")
        sys.exit(1)

    model_id = os.environ.get(
        "TRANSLATE_MODEL", "mlx-community/Qwen2.5-1.5B-Instruct-4bit"
    )
    sys.stderr.write(f">> 加载翻译模型 {model_id} ...\n")
    model, tokenizer = load(model_id)

    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {
            "role": "user",
            "content": f"Translate this into an English image prompt:\n{cn}",
        },
    ]
    out = clean(generate_text(model, tokenizer, messages))

    # 自检重试: 若结果仍含中日韩字符, 把【原始中文】一起喂回, 让模型重新理解后改写成纯英文。
    # 注意: 不要只回喂脏输出(模型会把中文词如"背着"又吐出来), 必须给原始中文作依据。
    attempts = 0
    while CJK_RE.search(out) and attempts < 2:
        attempts += 1
        sys.stderr.write(f">> 检测到残留中文, 第 {attempts} 次重新翻译为纯英文...\n")
        fix_messages = [
            {"role": "system", "content": SYSTEM_PROMPT},
            {
                "role": "user",
                "content": (
                    f'The Chinese original was: "{cn}".\n'
                    f'A previous English attempt was: "{out}" — but it still contains '
                    "Chinese/Japanese/Korean characters. Rewrite a COMPLETE, pure-English "
                    "image prompt that captures the FULL meaning of the Chinese original. "
                    "Output ONLY English, absolutely no Chinese/Japanese/Korean characters."
                ),
            },
        ]
        candidate = clean(generate_text(model, tokenizer, fix_messages))
        if candidate and not CJK_RE.search(candidate):
            out = candidate
        # 若仍残留, 保留原 out 进入下一轮(或最终兜底剔除)

    # 兜底: 极少数情况下模型仍夹带中文, 直接从结果中剔除中日韩字符,
    # 避免把中文漏给下游 FLUX(T5 不认中文, 会整句被忽略而生成无关图)。
    if CJK_RE.search(out):
        out = CJK_RE.sub("", out)
        out = re.sub(r"\s+", " ", out).strip()

    if not out:
        sys.stderr.write("✗ 翻译结果为空, 请重试或检查模型是否下载成功\n")
        sys.exit(1)
    if CJK_RE.search(out):
        sys.stderr.write("⚠ 翻译结果仍含中文, 已返回 (下游可能需放行处理)\n")
    print(out)


if __name__ == "__main__":
    main()

附录五:translate.sh(翻译命令封装,可选)

#!/usr/bin/env bash
# ============================================================
#  中文 → 英文图像提示词翻译 (本地小模型, 离线推理)
#  用法:
#    bash ~/ai-tools/translate.sh "中文提示词"
#    echo "中文" | bash ~/ai-tools/translate.sh
#  输出: 纯英文提示词 (到 stdout); 进度/提示走 stderr, 便于管道串联。
#  环境变量:
#    TRANSLATE_MODEL  模型 id (默认 mlx-community/Qwen2.5-1.5B-Instruct-4bit)
#    TRANSLATE_VENV   venv 路径 (默认 ~/ai-tools/venv-translate)
#    USE_MIRROR=1     走 hf-mirror.com 下载模型
# ============================================================
set -euo pipefail

# 隐私加固: 关闭 HuggingFace 匿名遥测(不含提示词/图片内容, 仅匿名使用统计), 翻译完全本地推理
export HF_HUB_DISABLE_TELEMETRY=1

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV="${TRANSLATE_VENV:-$DIR/venv-translate}"

if [ $# -lt 1 ]; then
  echo "用法: translate.sh \"中文提示词\"" >&2
  exit 1
fi
CN="$1"

if [ ! -f "$VENV/bin/activate" ]; then
  echo "✗ 未找到翻译 venv, 请先运行: bash $DIR/setup_translate.sh" >&2
  exit 1
fi
# shellcheck disable=SC1091
source "$VENV/bin/activate"

if [ "${USE_MIRROR:-0}" = "1" ]; then
  export HF_ENDPOINT="https://hf-mirror.com"
fi

# 进度信息走 stderr, 仅英文结果到 stdout
echo ">> 翻译中 (本地模型)..." >&2
python "$DIR/translate.py" "$CN"

附录六:gen_zh.sh(中文→翻译→生图一条龙,可选)

#!/usr/bin/env bash
# ============================================================
#  中文提示词 → 翻译为英文 → mflux 生图 (一条龙, 默认安静)
#  用法:
#    bash ~/ai-tools/gen_zh.sh "中文提示词"
#    bash ~/ai-tools/gen_zh.sh "中文提示词" 输出路径.png
#    bash ~/ai-tools/gen_zh.sh "中文提示词" 输出路径.png 宽 高 步数 量化
#  默认安静输出, 只打印两行:
#    翻译: <英文提示词>
#    ✓ 完成: <输出图片路径>
#  想看详细步骤与进度, 加 VERBOSE=1 :
#    VERBOSE=1 bash ~/ai-tools/gen_zh.sh "中文提示词"
#
#  说明: 第 1 步用本地翻译小模型把中文转成 FLUX 能懂的英文提示词,
#        第 2 步直接调 gen.sh 生图。模型均已本地缓存, 无需重复下载。
# ============================================================
set -euo pipefail

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VERBOSE="${VERBOSE:-0}"

if [ $# -lt 1 ]; then
  echo "用法: gen_zh.sh \"中文提示词\" [输出路径] [] [] [步数] [量化]" >&2
  exit 1
fi
CN="$1"
OUT="${2:-$HOME/Documents/Blogs/posts/assets/gen_$(date +%Y%m%d_%H%M%S).png}"
W="${3:-1024}"; H="${4:-1024}"; STEPS="${5:-4}"
QUANT="${MF_Q:-${6:-4}}"

if [ "$VERBOSE" = "1" ]; then
  echo ">>1 步: 中文 → 英文提示词 (本地翻译模型)"
  EN="$(bash "$DIR/translate.sh" "$CN")"
  echo "   中文: $CN"
  echo "   英文: $EN"
  echo ""
  echo ">> 第 2 步: 英文提示词 → 生图 (mflux)"
  # gen_zh 是受控中文通道: 翻译后本应纯英文; 若小模型偶发夹带中文(code-switch),
  # 放行并给警告, 避免被 gen.sh 的中文拦截硬崩。ALLOW_CJK=1 即跳过该拦截。
  # 注: 用 bash 内建 [[ =~ ]] 检测中文, 不依赖 grep -P(macOS BSD grep 不支持 -P)。
  if [[ "$EN" =~ [一-龥] ]]; then
    echo "   ⚠ 翻译结果仍含中文(小模型偶发), 已放行生图, 英文可能不纯" >&2
    ALLOW_CJK=1 bash "$DIR/gen.sh" "$EN" "$OUT" "$W" "$H" "$STEPS" "$QUANT"
  else
    bash "$DIR/gen.sh" "$EN" "$OUT" "$W" "$H" "$STEPS" "$QUANT"
  fi
else
  # 安静模式: 吞掉翻译进度, 仅取末行纯英文结果
  EN="$(bash "$DIR/translate.sh" "$CN" 2>/dev/null | tail -1)"
  if [ -z "$EN" ]; then
    echo "✗ 翻译结果为空, 请重试或检查翻译模型是否就绪" >&2
    exit 1
  fi
  echo "翻译: $EN"
  # 生图走 gen.sh 的 QUIET 模式: 仅抑制脚本自身的提示三行, mflux 生图进度条照常输出。
  # 同样: 残留中文则 ALLOW_CJK=1 放行并警告, 不让整条链硬崩。
  if [[ "$EN" =~ [一-龥] ]]; then
    echo "⚠ 翻译结果仍含中文(小模型偶发), 已放行生图, 英文可能不纯" >&2
    ALLOW_CJK=1 QUIET=1 bash "$DIR/gen.sh" "$EN" "$OUT" "$W" "$H" "$STEPS" "$QUANT"
  else
    QUIET=1 bash "$DIR/gen.sh" "$EN" "$OUT" "$W" "$H" "$STEPS" "$QUANT"
  fi
fi

附录七:gen_zimg.sh(Z-Image 中文生图封装,推荐)

#!/usr/bin/env bash
# ============================================================
#  本地生图封装脚本 (Z-Image Turbo —— mflux 免编译)
#  与 gen.sh(FLUX) / gen_zh.sh(FLUX+翻译) 平行,互不影响;Z-Image 原生支持中文,无需翻译层。
#
#  用法:
#    gen_zimg "一个穿着小裙子背着书包的小女孩走在放学路上"            # 最简:位置参数即提示词
#    gen_zimg -p "提示词"                                           # 等价写法
#    gen_zimg -p "提示词" -d ~/Downloads -f girl.png -w 720 -h 480 -s 9
#    gen_zimg --help
#
#  选项:
#    -p, --prompt    文本提示词 (可省略 -p, 直接作为第一个位置参数)
#    -d, --dir       输出目录 (默认 ~/Downloads/)
#    -f, --filename  输出文件名 (默认 "<提示词前若干字>_<时间>.png")
#    -w, --width     宽度 (默认 720)
#    -h, --height    高度 (默认 480)
#    -s, --step      步数 (默认 9, Z-Image Turbo 固定蒸馏步数)
#    -q, --quantize  量化等级 (默认 4;可选 8。4bit=预量化镜像; 8bit=官方 base 运行时量化)
#    --help          显示帮助
#
#  说明:
#    - 默认 4bit 预量化镜像 filipstrand/Z-Image-Turbo-mflux-4bit (~5.9GB 磁盘, 公开免登录)。
#    - -q 8 走官方 base 模型 + mflux 运行时量化 (首跑需联网下载 base ~21GB, 之后走本地缓存, 更清晰)。
#      4bit 与 8bit 分开缓存, 互不干扰; 你已装好的 4bit 不受影响。
#      (注: 第三方 8bit 镜像 andrevp/Z-Image-Turbo-MLX-8bit 文本编码器维度与当前 mflux 架构不符, 会崩, 已弃用)
#    - Z-Image Turbo 原生支持中文 prompt,直接喂中文即可,不需要翻译小模型。
#    - 脚本自动激活 ~/ai-tools/venv,复用已搭好的 mflux 环境,不碰 FLUX 任何东西。
#    - 极客模式: ZIMG_MODEL=任意仓库 覆盖模型(假定其已量化, 不加 -q);
#      或 ZIMG_MODEL=Tongyi-MAI/Z-Image-Turbo ZIMG_Q=8 对完整模型运行时量化(会先下 ~31GB)。
#    - 安静模式 QUIET=1: 只打印完成行,生图进度条照常输出。
#    - 隐私加固: 关闭 HF 遥测;模型已缓存则强制离线推理,提示词/图片不出本机。
# ============================================================
set -euo pipefail

usage() {
  cat <<'USAGE'
用法: gen_zimg [选项] [提示词]

  -p, --prompt    文本提示词 (可省略 -p, 直接作为第一个位置参数)
  -d, --dir       输出目录 (默认 ~/Downloads/)
  -f, --filename  输出文件名 (默认 "<提示词前若干字>_<时间>.png")
  -w, --width     宽度 (默认 720)
  -h, --height    高度 (默认 480)
  -s, --step      步数 (默认 9, Z-Image Turbo 固定蒸馏步数)
  -q, --quantize  量化等级 (默认 4; 可选 8。4bit~5.9GB 预量化 / 8bit=base 运行时量化, 首跑下载~21GB)
  --help          显示本帮助

示例:
  gen_zimg "一个穿着小裙子背着书包的小女孩走在放学路上"
  gen_zimg -p "提示词" -d ~/Downloads -f girl.png -w 720 -h 480 -s 9
  gen_zimg -q 8 "提示词"                         # 8bit: base 模型运行时量化(更清晰, 首跑下载~21GB)

说明: Z-Image Turbo 原生支持中文, 无需翻译层; 默认 4bit 镜像 (~5.9GB) 公开免登录。
USAGE
}

# ---- 参数默认值 ----
PROMPT=""
OUTDIR="$HOME/Downloads"
FILENAME=""
W=720
H=480
STEPS=9
QUANT="4"

while [[ $# -gt 0 ]]; do
  case "$1" in
    -p|--prompt)   PROMPT="$2"; shift 2;;
    -d|--dir)      OUTDIR="$2"; shift 2;;
    -f|--filename) FILENAME="$2"; shift 2;;
    -w|--width)    W="$2"; shift 2;;
    -h|--height)   H="$2"; shift 2;;
    -s|--step)     STEPS="$2"; shift 2;;
    -q|--quantize) QUANT="$2"; shift 2;;
    --help)        usage; exit 0;;
    --)            shift; break;;
    -*)            echo "✗ 未知选项: $1"; usage; exit 1;;
    *)             # 位置参数 (省略 -p 时的提示词)
                   if [ -z "$PROMPT" ]; then PROMPT="$1"; shift; else echo "✗ 多余参数: $1"; usage; exit 1; fi;;
  esac
done

if [ -z "$PROMPT" ]; then
  echo "✗ 未提供提示词。" >&2
  usage
  exit 1
fi

# 展开 ~ 开头的目录为 $HOME
OUTDIR="${OUTDIR/#\~/$HOME}"

# 默认文件名: 清洗后的提示词(前 20 字) + 时间戳
if [ -z "$FILENAME" ]; then
  if command -v python3 >/dev/null 2>&1; then
    FILENAME="$(python3 - "$PROMPT" <<'PY'
import sys, re, time
s = sys.argv[1]
s = re.sub(r'[\\/:*?"<>|]', '_', s).replace(' ', '_')
s = s[:20]
print(s + '_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
PY
)"
  else
    # fallback: bash 粗略清洗 (不截断, 避免 bash3.2 多字节截断乱码)
    f="${PROMPT//\//_}"; f="${f//\\/_}"; f="${f//:/_}"; f="${f//\*/_}"
    f="${f//\?/_}"; f="${f//\"/_}"; f="${f//</_}"; f="${f//>/_}"; f="${f//\|/_}"; f="${f// /_}"
    FILENAME="${f}_$(date +%Y%m%d_%H%M%S).png"
  fi
fi

OUT="$OUTDIR/$FILENAME"

# ---- 模型选择 ----
# - ZIMG_MODEL 显式指定 → 直接用该仓库(假定已量化, 不加 -q)
# - -q 4 (默认)        → filipstrand 4bit 预量化镜像(已量化, 不加 -q)
# - -q 8 / 其他等级    → 官方 base 模型 Tongyi-MAI/Z-Image-Turbo + mflux 运行时量化(加 -q)
#   说明: 之前试过第三方 8bit 镜像 andrevp/Z-Image-Turbo-MLX-8bit, 但其文本编码器维度与当前
#         mflux 版本架构不符会崩(ValueError: matmul 2560≠4096), 故 8bit 改回"官方 base + 运行时量化"
#         这条 mflux 官方文档保证兼容的路径。代价是首跑需下载 base 权重(~21GB fp16), 之后走本地缓存。
if [ -n "${ZIMG_MODEL:-}" ]; then
  MODEL="$ZIMG_MODEL"
  QUANT_ARG=""
elif [ "$QUANT" = "4" ]; then
  MODEL="filipstrand/Z-Image-Turbo-mflux-4bit"
  QUANT_ARG=""
else
  # 8bit 及任何其他量化等级: 用官方 base 模型 + mflux 运行时量化
  # (保证与当前 mflux 的 Z-Image 架构一致; 第三方预量化镜像如 andrevp 维度对不上会崩)
  MODEL="Tongyi-MAI/Z-Image-Turbo"
  QUANT_ARG="-q $QUANT"
fi

# 隐私加固: 关闭 HuggingFace 匿名遥测(不含提示词/图片内容, 仅匿名使用统计)
export HF_HUB_DISABLE_TELEMETRY=1
# 若 Z-Image 模型已缓存, 强制离线推理: 模型就绪后, 提示词与生成的图片绝不会出本机
# (需重新下载模型时, 设 HF_ALLOW_ONLINE=1 即可临时联网)
# 缓存目录按当前 MODEL 动态推导 (HF 缓存命名: models--<owner>--<repo>, '/' 替换为 '--')
ZIMG_CACHE="$HOME/.cache/huggingface/hub/models--${MODEL//\//--}"
if [ -d "$ZIMG_CACHE" ] && [ -z "${HF_ALLOW_ONLINE:-}" ]; then
  export HF_HUB_OFFLINE=1
fi

VENV="$HOME/ai-tools/venv"
if [ ! -f "$VENV/bin/activate" ]; then
  echo "✗ 未找到 venv,请先运行: bash ~/ai-tools/setup.sh"
  exit 1
fi
# shellcheck disable=SC1091
source "$VENV/bin/activate"

if ! command -v mflux-generate-z-image-turbo >/dev/null 2>&1; then
  echo "✗ venv 里没有 mflux-generate-z-image-turbo,请重跑: bash ~/ai-tools/setup.sh"
  exit 1
fi

mkdir -p "$OUTDIR"
if [ "${QUIET:-0}" != "1" ]; then
  echo ">> 生成中: $OUT"
  echo "   prompt: $PROMPT"
  echo "   model: $MODEL  (Z-Image Turbo 固定 ${STEPS} 步)"
fi
# 注意: QUIET 仅抑制本脚本自身的提示三行; mflux 的生图进度条照常输出, 便于观察进度。
# 4bit 镜像已预量化($QUANT_ARG 为空); 8bit 走 base + 运行时量化(-q 8 由 mflux 内部执行)。
# shellcheck disable=SC2086
mflux-generate-z-image-turbo --model "$MODEL" --prompt "$PROMPT" \
  --output "$OUT" --width "$W" --height "$H" --steps "$STEPS" \
  --seed "$(date +%s)" $QUANT_ARG
echo "✓ 完成: $OUT"

相关阅读:

如果这篇对你有用,发财的小手点个小赞,咱们评论区接着聊。


本文由 FungLeo 主导,Deepseek 优化校阅,命令与脚本均经实机验证,转发请注明首发地址,谢谢大家!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐