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
# Python
**/__pycache__
examples/
*.py[cod]
*$py.class
*.so
.Python
*.egg-info/
IOPaint.egg-info/
.pytest_cache/
.coverage
# Virtual environments
venv/
env/
ENV/
# IDEs
.idea/
.vscode/
build
*.swp
*.swo
# Build artifacts
build/
!iopaint/app/build
dist/
IOPaint.egg-info/
venv/
tmp/
# Frontend
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.
## 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
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])
@torch.cuda.amp.autocast()
@torch.amp.autocast('cuda')
def forward(self, image, mask, config: InpaintRequest):
"""
image: [H, W, C] RGB

View File

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