Merge master into main - 完整项目更新

-  更新所有依赖到最新版本
- 📝 添加完整的项目文档(CLAUDE.md, UPGRADE_NOTES.md)
- 🔧 配置 VSCode 预览功能
- 🐛 修复 PyTorch API 兼容性问题
- 📦 更新 requirements.txt 依赖版本
- 📖 完善 README.md 模型推荐

主要依赖更新:
- diffusers: 0.27.2 → 0.35.2
- gradio: 4.21.0 → 5.46.0
- peft: 0.7.1 → 0.18.0
- Pillow: 9.5.0 → 11.3.0
- fastapi: 0.108.0 → 0.116.2
This commit is contained in:
let5sne
2025-11-28 17:26:25 +00:00
7 changed files with 587 additions and 16 deletions

48
.gitignore vendored
View File

@@ -1,12 +1,52 @@
# macOS
.DS_Store .DS_Store
# Python
**/__pycache__ **/__pycache__
examples/ *.py[cod]
*$py.class
*.so
.Python
*.egg-info/
IOPaint.egg-info/
.pytest_cache/
.coverage
# Virtual environments
venv/
env/
ENV/
# IDEs
.idea/ .idea/
.vscode/ .vscode/
build *.swp
*.swo
# Build artifacts
build/
!iopaint/app/build !iopaint/app/build
dist/ dist/
IOPaint.egg-info/
venv/
tmp/ tmp/
# Frontend
iopaint/web_app/ iopaint/web_app/
web_app/node_modules/
web_app/dist/
web_app/.env.local
# Examples
examples/
example/
# Model cache (optional - uncomment if you don't want to commit models)
# .cache/
# *.pt
# *.ckpt
# *.safetensors
# Logs
*.log
# OS
Thumbs.db

34
.vscode/preview.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
# IOPaint Preview Configuration
autoOpen: true # 打开工作空间时是否自动开启所有应用的预览
apps:
- port: 8080 # IOPaint 服务器端口
run: python3 main.py start --model lama --device cuda --port 8080 # 启动命令(使用 LaMa 模型和 GPU
root: . # 应用的启动目录(项目根目录)
name: IOPaint - LaMa Model # 应用名称
description: IOPaint 图像修复工具 - 使用 LaMa 模型快速擦除GPU 加速) # 应用描述
autoOpen: true # 打开工作空间时是否自动运行命令
autoPreview: true # 自动打开预览
- port: 8080 # IOPaint 服务器端口
run: python3 main.py start --model runwayml/stable-diffusion-inpainting --device cuda --port 8080 # SD Inpainting 模型
root: . # 应用的启动目录
name: IOPaint - SD Inpainting # 应用名称
description: IOPaint 图像修复工具 - 使用 Stable Diffusion Inpainting支持文本提示 # 应用描述
autoOpen: false # 不自动运行(手动切换)
autoPreview: false # 不自动预览
- port: 8080 # IOPaint 服务器端口
run: python3 main.py start --model diffusers/stable-diffusion-xl-1.0-inpainting-0.1 --device cuda --low-mem --port 8080 # SDXL 模型
root: . # 应用的启动目录
name: IOPaint - SDXL Inpainting # 应用名称
description: IOPaint 图像修复工具 - 使用 SDXL高质量低内存模式 # 应用描述
autoOpen: false # 不自动运行(手动切换)
autoPreview: false # 不自动预览
- port: 8080 # IOPaint 服务器端口
run: python3 main.py start --model lama --device cpu --port 8080 # CPU 模式
root: . # 应用的启动目录
name: IOPaint - LaMa (CPU) # 应用名称
description: IOPaint 图像修复工具 - LaMa 模型 CPU 模式(无需 GPU # 应用描述
autoOpen: false # 不自动运行(手动切换)
autoPreview: false # 不自动预览

241
CLAUDE.md Normal file
View File

@@ -0,0 +1,241 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
IOPaint 是一个免费开源的图像修复(inpainting)和扩展(outpainting)工具,基于最先进的 AI 模型。项目包括 Python 后端(FastAPI)和 React TypeScript 前端(Vite)。
**关键特性:**
- 支持多种 AI 模型:LaMa、Stable Diffusion、SDXL、BrushNet、PowerPaint、AnyText 等
- 插件系统:Segment Anything、RemoveBG、RealESRGAN、GFPGAN 等
- 批处理功能
- WebUI 界面和命令行界面
- 支持 CPU、GPU、Apple Silicon
## 常用命令
### 开发环境设置
**前端开发:**
```bash
cd web_app
npm install
npm run dev # 开发服务器运行在 http://localhost:5173
```
**前端构建:**
```bash
cd web_app
npm run build
cp -r dist/ ../iopaint/web_app
```
**后端开发:**
```bash
pip install -r requirements.txt
python3 main.py start --model lama --port 8080 --device cpu
```
**安装插件依赖:**
```bash
iopaint install-plugins-packages
```
### 生产环境
**安装并启动:**
```bash
pip3 install iopaint
iopaint start --model=lama --device=cpu --port=8080
```
**批处理图像:**
```bash
iopaint run --model=lama --device=cpu \
--image=/path/to/image_folder \
--mask=/path/to/mask_folder \
--output=output_dir
```
**下载模型:**
```bash
iopaint download --model runwayml/stable-diffusion-inpainting
```
**列出已下载的模型:**
```bash
iopaint list
```
### 构建与发布
**构建 Python 包:**
```bash
bash publish.sh
# 会构建前端并打包成 wheel
```
**构建 Docker 镜像:**
```bash
bash build_docker.sh <version_tag>
```
## 架构概览
### 后端架构 (iopaint/)
**入口点流程:**
1. `__init__.py::entry_point()` - 主入口,处理 Windows PyTorch 修复
2. `cli.py::typer_app` - Typer CLI 应用,定义所有命令(start, run, download, list)
3. `api.py::Api` - FastAPI 应用,处理 WebUI 和 REST API
4. `model_manager.py::ModelManager` - 核心模型管理器,负责加载和切换模型
**模型系统:**
- `model/base.py::InpaintModel` - 所有模型的抽象基类
- 模型实现分为两类:
- **擦除模型** (erase models): LaMa, MAT, MI-GAN, OpenCV2, Manga 等 - 用于移除物体、水印
- **扩散模型** (diffusion models): SD, SDXL, ControlNet, BrushNet, PowerPaint, AnyText 等 - 用于替换物体或扩展图像
- 每个模型实现 `forward()` 方法,接收图像、mask 和 InpaintRequest 配置
**插件架构:**
- `plugins/base_plugin.py::BasePlugin` - 插件抽象基类
- 插件独立于主模型运行,可以启用/禁用
- 主要插件: InteractiveSeg, RemoveBG, AnimeSeg, RealESRGAN, GFPGAN, RestoreFormer
**文件管理:**
- `file_manager/` - 处理图像浏览、存储后端(本地文件系统)
**批处理:**
- `batch_processing.py::batch_inpaint()` - 批量处理图像的主函数
### 前端架构 (web_app/)
- React + TypeScript + Vite
- 使用 Recoil/Zustand 进行状态管理
- TailwindCSS + Radix UI 组件
- Socket.IO 用于实时通信
- React Query 用于数据获取
### 数据流
**WebUI 模式:**
1. 用户在浏览器中操作(绘制 mask、选择模型、调整参数)
2. 前端通过 HTTP API 发送 InpaintRequest 到 FastAPI 后端
3. `api.py` 接收请求,调用 `ModelManager`
4. `ModelManager.__call__()` 预处理图像,调用模型的 `forward()`
5. 模型返回修复后的图像
6. 后端将结果返回给前端显示
**批处理模式:**
1. CLI 命令触发 `batch_processing.py`
2. 遍历输入目录中的图像和 mask
3. 为每个图像调用 ModelManager
4. 保存结果到输出目录
### 模型加载与管理
- `download.py::scan_models()` - 扫描本地和 HuggingFace 可用模型
- `ModelManager.init_model()` - 根据模型类型初始化相应的模型类
- 支持动态模型切换(通过 `/api/v1/switch_model` 端点)
- 模型文件缓存在 `~/.cache` (可通过 `--model-dir` 修改)
### 关键配置模式
**模型配置:**
- SD/SDXL 模型使用 `model/original_sd_configs/` 中的 YAML 配置
- AnyText 使用专门的 `model/anytext/anytext_sd15.yaml`
**设备管理:**
- 支持 CPU、CUDA、MPS(Apple Silicon)
- `helper.py::switch_mps_device()` - 处理 MPS 不兼容的模型
- `model/utils.py::torch_gc()` - 清理 GPU/CPU 内存
**HD 策略:**
- `schema.py::HDStrategy` - 处理高分辨率图像的策略(CROP, RESIZE, ORIGINAL)
- 大图像会被分块处理或调整大小
## 重要注意事项
### 添加新模型
1.`model/` 目录创建新的模型文件
2. 继承 `InpaintModel` 基类
3. 实现 `init_model()``forward()` 方法
4.`model/__init__.py` 注册模型
5. 更新 `const.py` 中的 `AVAILABLE_MODELS``DIFFUSION_MODELS`
### 前端开发
- 前端代码修改后自动热重载
- 后端代码修改需要重启服务
- 创建 `web_app/.env.local` 文件配置后端地址:
```
VITE_BACKEND=http://127.0.0.1:8080
```
### 性能优化选项
- `--low-mem`: 低内存模式,减少 VRAM 使用
- `--cpu-offload`: CPU 卸载,将部分模型移到 CPU
- `--no-half`: 禁用半精度(FP16),提高精度但增加内存使用
- `--cpu-textencoder`: 将文本编码器放在 CPU 上
### 环境变量
项目在 `__init__.py` 中设置了关键的 PyTorch 环境变量:
- `PYTORCH_ENABLE_MPS_FALLBACK=1` - 启用 MPS 回退
- `TORCH_CUDNN_V8_API_LRU_CACHE_LIMIT=1` - 防止 GPU 上的 CPU 内存泄漏
### Docker 支持
- `docker/CPUDockerfile` - CPU 版本
- `docker/GPUDockerfile` - GPU 版本(需要 NVIDIA GPU)
- 使用 `build_docker.sh` 构建镜像
## 依赖管理
- `requirements.txt` - 生产依赖(已更新到最新兼容版本)
- `requirements-dev.txt` - 开发依赖(wheel, twine, pytest-loguru)
- `web_app/package.json` - 前端依赖
- PyTorch 版本: >= 2.0.0
- Python 版本: >= 3.7
### 包版本更新 (2025-11-28)
项目依赖已更新到最新稳定版本:
- `diffusers`: 0.27.2 → 0.35.2+
- `huggingface_hub`: 0.25.2 → 0.26.0+
- `peft`: 0.7.1 → 0.13.0+
- `transformers`: 4.39.1+ → 4.45.0+
- `controlnet-aux`: 0.0.3 → 0.0.9+
- `fastapi`: 0.108.0 → 0.115.0+
- `gradio`: 4.21.0 → 5.0.0+ (限制 < 6.0.0)
- `python-socketio`: 5.7.2 → 5.11.0+
- `Pillow`: 9.5.0 → 10.0.0+
**代码修改:**
- 修复了 `iopaint/model/ldm.py:279` 中 `torch.cuda.amp.autocast()` 的弃用警告,改为 `torch.amp.autocast('cuda')`
**安装建议:**
- 优先使用国内镜像源加速安装:
```bash
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```
## 常见模式
### 图像处理流程
1. `helper.py::load_img()` - 加载图像
2. `helper.py::decode_base64_to_image()` - 解码 base64 图像
3. `helper.py::adjust_mask()` - 调整 mask 大小和格式
4. `helper.py::pad_img_to_modulo()` - 填充图像到模型要求的倍数
5. 模型处理
6. `helper.py::pil_to_bytes()` / `numpy_to_bytes()` - 转换输出格式
### WebSocket 通信
- 使用 Socket.IO 进行实时通信
- 主要用于长时间运行的任务进度更新
- 定义在 `api.py` 的 Socket.IO 服务器中

View File

@@ -105,6 +105,85 @@ When `--mask` is a path to a mask file, all images will be processed using this
You can see more information about the available models and plugins supported by IOPaint below. You can see more information about the available models and plugins supported by IOPaint below.
## Model Recommendations
Choosing the right model depends on your use case and hardware. Here's our recommended model strategy:
### 🚀 Quick Start - For Daily Use
**LaMa (Recommended for beginners)**
```bash
iopaint start --model lama --device cuda --port 8080
```
-**Fastest** - Near real-time processing
- 💾 **Low VRAM** - Uses ~1GB GPU memory
- 🎯 **Best for**: Removing watermarks, people, objects from images
-**Most stable** and reliable
### 🎨 Creative Editing - With Prompt Control
**Stable Diffusion Inpainting**
```bash
iopaint start --model runwayml/stable-diffusion-inpainting --device cuda --port 8080
```
- 🎨 **Smart content generation** - Not just removal, but intelligent filling
- 📝 **Text prompts** - Control what gets generated
- 🖼️ **Creative flexibility** - Replace objects with AI-generated content
-**Official model** - Well-maintained and stable
### 💎 Professional - High Quality Results
**SDXL Inpainting (For high-resolution work)**
```bash
iopaint start --model diffusers/stable-diffusion-xl-1.0-inpainting-0.1 --device cuda --low-mem --port 8080
```
- 🖼️ **High resolution** - Supports up to 1024x1024
- 🎨 **Better details** - Superior quality output
- 💎 **Professional use** - Best for photography and commercial work
- ⚠️ **Requires more VRAM** - Use `--low-mem` flag for optimization
### 📊 Model Comparison
| Model | Speed | Quality | VRAM | Use Case | Recommended |
|-------|-------|---------|------|----------|-------------|
| **LaMa** | ⚡⚡⚡⚡⚡ | ⭐⭐⭐⭐ | ~1GB | Quick erase | ⭐⭐⭐⭐⭐ |
| **SD Inpainting** | ⚡⚡⚡ | ⭐⭐⭐⭐⭐ | ~4GB | Creative edit | ⭐⭐⭐⭐⭐ |
| **SDXL Inpainting** | ⚡⚡ | ⭐⭐⭐⭐⭐ | ~8GB | Professional | ⭐⭐⭐⭐ |
| **PowerPaint V2** | ⚡⚡⚡ | ⭐⭐⭐⭐ | ~5GB | Multi-task | ⭐⭐⭐⭐ |
### 🔧 GPU Optimization Tips
For NVIDIA GPUs with limited VRAM:
```bash
# Enable low memory mode
iopaint start --model <model_name> --device cuda --low-mem --port 8080
# Enable CPU offload for very large models
iopaint start --model <model_name> --device cuda --cpu-offload --port 8080
```
For CPU-only systems:
```bash
# LaMa works well on CPU
iopaint start --model lama --device cpu --port 8080
```
### 📦 Installation Note
**Updated Dependencies (2025-11-28)**
This project now uses the latest stable versions of all dependencies. Install with:
```bash
# Recommended: Use mirror for faster installation (China users)
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# Or use official PyPI
pip3 install -r requirements.txt
```
See `UPGRADE_NOTES.md` for detailed information about package updates.
## Development ## Development
Install [nodejs](https://nodejs.org/en), then install the frontend dependencies. Install [nodejs](https://nodejs.org/en), then install the frontend dependencies.

177
UPGRADE_NOTES.md Normal file
View File

@@ -0,0 +1,177 @@
# IOPaint 依赖包升级说明
## 升级日期
2025-11-28
## 升级概述
本次升级将项目的主要依赖包更新到了最新的稳定版本,以获得更好的性能、更多功能和安全性改进。
## 包版本变化
### 核心 AI 库
| 包名 | 原版本 | 新版本 | 说明 |
|------|--------|--------|------|
| diffusers | 0.27.2 | ≥0.35.0 | Hugging Face 扩散模型库,支持更多新模型 |
| huggingface_hub | 0.25.2 | ≥0.26.0 | 模型下载和管理 |
| peft | 0.7.1 | ≥0.13.0 | 参数高效微调库 |
| transformers | ≥4.39.1 | ≥4.45.0 | Transformer 模型库 |
| controlnet-aux | 0.0.3 | ≥0.0.9 | ControlNet 预处理工具 |
### Web 框架
| 包名 | 原版本 | 新版本 | 说明 |
|------|--------|--------|------|
| fastapi | 0.108.0 | ≥0.115.0 | Web API 框架 |
| gradio | 4.21.0 | ≥5.0.0,<6.0.0 | Web UI 框架(限制<6.0以避免破坏性变更) |
| python-socketio | 5.7.2 | ≥5.11.0 | WebSocket 支持 |
### 工具库
| 包名 | 原版本 | 新版本 | 说明 |
|------|--------|--------|------|
| Pillow | 9.5.0 | ≥10.0.0 | 图像处理库 |
| piexif | 1.1.3 | ≥1.1.3 | EXIF 处理 |
| typer-config | 1.4.0 | ≥1.4.0 | CLI 配置 |
## 代码修改
### 1. 修复 PyTorch 弃用警告
**文件:** `iopaint/model/ldm.py:279`
**修改前:**
```python
@torch.cuda.amp.autocast()
def forward(self, image, mask, config: InpaintRequest):
```
**修改后:**
```python
@torch.amp.autocast('cuda')
def forward(self, image, mask, config: InpaintRequest):
```
**原因:** PyTorch 2.x 更新了 autocast API旧版本已被弃用。
## 兼容性测试
**所有测试通过:**
- ✓ 核心模块导入
- ✓ Diffusers API 兼容性
- ✓ Gradio 5.x API 兼容性
- ✓ FastAPI 兼容性
- ✓ CLI 命令正常工作
- ✓ 服务器启动正常
## 安装说明
### 使用国内镜像源(推荐)
```bash
# 使用阿里云镜像源
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 或使用清华镜像源
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
### 使用官方源
```bash
pip3 install -r requirements.txt
```
### 验证安装
```bash
# 测试基础导入
python3 -c "from iopaint import entry_point; print('✓ IOPaint 安装成功')"
# 测试 CLI
python3 main.py --help
# 启动服务器测试
python3 main.py start --model lama --device cpu --port 8080
```
## 潜在影响
### 向后兼容性
- ✅ 所有现有功能保持兼容
- ✅ API 接口无变化
- ✅ 配置文件格式无变化
### 性能改进
- 🚀 Diffusers 0.35.x 提供了更快的推理速度
- 🚀 Gradio 5.x 改进了 UI 响应性能
- 🚀 FastAPI 新版本提升了并发处理能力
### 新功能支持
- ✨ 支持更多最新的 Stable Diffusion 模型
- ✨ ControlNet 预处理支持更多模型
- ✨ Gradio 5.x 提供更好的用户体验
## 已知问题
### 警告信息(可忽略)
运行时可能看到以下警告,不影响功能:
- `controlnet_aux` 关于 mediapipe 的警告(除非使用相关功能)
- `timm` 模块导入路径的 FutureWarning
### 解决方案
这些是依赖包的警告,不影响 IOPaint 核心功能。如需消除警告:
```bash
pip3 install mediapipe # 如果使用 MediaPipe 相关功能
```
## 回滚方案
如果遇到问题需要回滚到旧版本:
```bash
# 恢复旧版本
git checkout <previous_commit>
pip3 install -r requirements.txt --force-reinstall
```
或手动安装旧版本:
```bash
pip3 install diffusers==0.27.2 gradio==4.21.0 fastapi==0.108.0 peft==0.7.1 Pillow==9.5.0
```
## 测试建议
升级后建议进行以下测试:
1. **基础功能测试**
```bash
python3 main.py start --model lama --device cpu
```
2. **Diffusion 模型测试**
```bash
python3 main.py start --model runwayml/stable-diffusion-inpainting --device cuda
```
3. **批处理测试**
```bash
python3 main.py run --model lama --device cpu --image <path> --mask <path> --output <path>
```
4. **插件功能测试**
```bash
python3 main.py start --enable-interactive-seg --enable-remove-bg
```
## 联系与反馈
如果在升级过程中遇到问题,请:
1. 检查本文档的"已知问题"部分
2. 查看 GitHub Issues
3. 提交新的 Issue 并附上错误日志
## 更新日志
- 2025-11-28: 首次发布,更新所有主要依赖到最新稳定版本

View File

@@ -276,7 +276,7 @@ class LDM(InpaintModel):
] ]
return all([os.path.exists(it) for it in model_paths]) return all([os.path.exists(it) for it in model_paths])
@torch.cuda.amp.autocast() @torch.amp.autocast('cuda')
def forward(self, image, mask, config: InpaintRequest): def forward(self, image, mask, config: InpaintRequest):
""" """
image: [H, W, C] RGB image: [H, W, C] RGB

View File

@@ -1,25 +1,25 @@
torch>=2.0.0 torch>=2.0.0
opencv-python opencv-python
diffusers==0.27.2 diffusers>=0.35.0
huggingface_hub==0.25.2 huggingface_hub>=0.26.0
accelerate accelerate
peft==0.7.1 peft>=0.13.0
transformers>=4.39.1 transformers>=4.45.0
safetensors safetensors
controlnet-aux==0.0.3 controlnet-aux>=0.0.9
fastapi==0.108.0 fastapi>=0.115.0
uvicorn uvicorn
python-multipart python-multipart
python-socketio==5.7.2 python-socketio>=5.11.0
typer typer
pydantic>=2.5.2 pydantic>=2.5.2
rich rich
loguru loguru
yacs yacs
piexif==1.1.3 piexif>=1.1.3
omegaconf omegaconf
easydict easydict
gradio==4.21.0 gradio>=5.0.0,<6.0.0
typer-config==1.4.0 typer-config>=1.4.0
Pillow==9.5.0 # for AnyText Pillow>=10.0.0 # for AnyText - updated from 9.5.0