# Civitai 模型下载记录：Qwen-Image-2.1 Edit LoRA（Early Access 定时下载）

**状态**：✅ **已完成**（2026-09-25 20:52 下载成功并校验通过）

## 下载结果

| 项 | 值 |
|---|---|
| 模型 | 【Qwen Image 2.1】Edit LoRA｜全裸编辑 / Nude Edit |
| 模型页 | https://civitai.red/models/2956565 |
| 版本 | v1.0（version id 3349092）｜ baseModel：Qwen ｜ NSFW |
| 文件 | `Qwen-Image-2.1 NSFW Image Edit.safetensors` |
| 大小 | **83,943,552 字节**（80.1 MiB） |
| SHA256 | `9C143CBFE7B016EFDCE7499506C02D0BFA1842AE6524BB64E05888F2E325E67A` ✅ 与官方一致 |
| 格式校验 | safetensors 合法，448 个张量，键名 `transformer_blocks.*.attn.to_k.lora_A/lora_B` → 确认是 LoRA |
| 落盘路径 | `~/Downloads/xunlei-downloads/Qwen-Image-2.1 NSFW Image Edit.safetensors` |

下载中心：http://192.168.31.76:8899/09-迅雷下载/

## 时间线

| 时间 | 事件 |
|---|---|
| 2026-09-23 07:46 | 部署 systemd 用户单元 `civitai-qwen-lora-dl`，进入 sleep 等待 Early Access 到期 |
| 2026-09-25 20:49:39 | Early Access 到期（deadline 2026-09-25T12:49:39Z） |
| 2026-09-25 20:51:40 | 首次唤醒，API 返回 307 签名 URL（闸门已开） |
| 2026-09-25 20:52:20 | 换成修订版脚本（加代理）后重试 |
| **2026-09-25 20:52:34** | **下载完成**：经 v2ray 代理，**13 秒**下完 80 MiB |
| 2026-09-25 20:52:35 | SHA256 校验（脚本误报大小写不匹配，见坑 2） |
| 2026-09-25 20:53:03 | 修正脚本后重跑：识别到文件已完整，`status=0/SUCCESS` 干净退出 |

## 为什么当初要定时等（背景）

该模型 2026-09-22 12:49 UTC 发布时处于 **Early Access** 期，期间：
- Civitai API 直接返回 `403 {"error":"Early Access"}`（需 Buzz 付费解锁，本账号无 Buzz）
- B2 对象为私有，需签名 URL
- 第三方镜像（HF / ModelScope / civitai.work 等）均无当天发布的新模型副本

故安排 systemd 定时任务等到期后自动下载。

## 踩到的三个坑（重要经验）

### 坑 1：签名 URL 的域名会变，可能落在被污染域
- 本模型签名 URL 指向 **`b2.civitai.com`** —— 本机 DNS 被污染（解析到 Facebook 段），**直连必失败**。
- 定时任务初版脚本用 `curl --noproxy '*'` 下载，**会一直失败**。
- ✅ 已修：脚本改为**优先走 v2ray 代理 `http://127.0.0.1:10809`**，失败再试直连兜底。
- ⚠️ 不同文件的 CDN 域名可能不同（另一模型是 `civitai-delivery-worker-prod....r2.cloudflarestorage.com`），
  **一律走代理最保险**（实测 2.7 MB/s）。

### 坑 2：SHA256 大小写比较（两个脚本各犯一次）
- `sha256sum` 输出**小写**，Civitai API 返回**大写** → `[ "$A" = "$B" ]` 会误报「不匹配」。
- 实际文件正确，只是脚本最后一步判断失败并 `exit 1`（服务变 failed）。
- ✅ 两个脚本均已改为 `${VAR,,}` 忽略大小写比较：
  - `qwen-image-21-edit-lora-auto-dl.sh`
  - `qwen-image-nsfw-helm-dl.sh`

### 坑 3（运维）：改正在长 sleep 的脚本后必须重启服务
- bash **增量读取**脚本文件；进程还在 `sleep` 时编辑脚本，醒来后会按旧字节偏移继续读 → 读到错位内容。
- 正确做法：改完脚本立刻 `systemctl --user restart <unit>`。

## 服务现状（已收尾）

- 单元 `civitai-qwen-lora-dl.service` 已 `disable`（任务完成，不再需要开机自启）。
- 单元文件保留在 `~/.config/systemd/user/civitai-qwen-lora-dl.service`，如需再跑：
  `systemctl --user start civitai-qwen-lora-dl`
- 脚本幂等：文件已存在且校验通过时直接退出 0。
