[ English | 中文 ]
使用 FastAPI 构建的 Fooocus 的 API。
当前支持的 Fooocus 版本: 2.1.860。
该部分出自 Fooocus 项目。
Fooocus 是一个图像生成软件 (基于 Gradio)。
Fooocus 是对于 Stable Diffusion 和 Midjourney 的重新思考以及设计:
-
我们学习了 Stable Diffusion 的开源、免费、离线运行。
-
我们学习了 Midjourney 的专注,不需要手动调整,专注于描述词以及图像。
Fooocus 包含了许多内部优化以及质量改进。 忘记那些复杂困难的技术参数,享受人机交互带来的想象力的突破以及探索新的思维
可能你已经尝试过使用 Gradio client 来调用 Fooocus,对我来说可真是不咋地
Fooocus API 使用 FastAPI 构建了一系列 REST
API 来使用 Fooocus。现在,你可以用任何你喜欢的编程语言来调用 Fooocus 的强大能力。
现在你可以在 Replicate 上使用 Fooocus-API,在这儿: konieshadow/fooocus-api.
使用预先调整参数的:
我认为这是更简单的体验 Fooocus's 强大的方法
需要 Python >= 3.10,或者使用 conda、venv 创建一个新的环境
硬件需求来源于 Fooocus。 详细要求可以看这里
按照下面的步骤启动一个 app:
conda env create -f environment.yaml
conda activate fooocus-api
然后,执行 python main.py
启动 app ,默认情况下会监听在 http://127.0.0.1:8888
如果是第一次运行,程序会自动处理完成剩余的环境配置、模型下载等工作,因此会等待一段时间。也可以预先配置好环境、下载模型,后面会提到。
和使用 conda 差不多,创建虚拟环境,启动 app ,等待程序完成环境安装、模型下载
# windows
python -m venv venv
.\venv\Scripts\Activate
# linux
python -m venv venv
source venv/bin/activate
然后执行 python main.py
如果想要手动配置环境以及放置模型,可以参考下面的步骤
在创建完 conda 或者 venv 环境之后,按照下面的步骤手动配置环境、下载模型
首先,安装 requirements: pip install -r requirements.txt
然后安装 pytorch+cuda: pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
更多安装信息在这儿,
关于 pytorch 和 cuda 的版本,Fooocus API 使用的是 Fooocus 推荐的版本,目前是 pytorch2.1.0+cuda12.1。如果你是个"犟种"非要用其他版本,我测试过也是可以的,不过启动的时候记得加上
--skip-pip
,否则程序会自动替换为推荐版本。
然后创建一个名为 repositories
的目录,将 https://github.com/lllyasviel/Fooocus
克隆到其中。注意必须使用 git clone
,download zip
下载解压不包含Git信息,无法正常运行。如果你有一个已经安装完成的 Fooocus,查看这里
最后,把下载的模型放到这个目录 repositories\Fooocus\models
这里是一个启动必须下载的模型列表 (也可能不一样如果 启动参数 不同的话):
-
checkpoint: 放到
repositories\Fooocus\models\checkpoints
-
vae_approx: 放到
repositories\Fooocus\models\vae_approx
-
lora: 放到
repositories\Fooocus\models\loras
国内不好下的到 这儿下载, 提取码:
D4Mk
如果你已经有一个安装好的且运行正常的 Fooocus, 推荐的方式是复用模型, 只需要将 Fooocus 根目录下的 config.txt
文件复制到 Fooocus API 的根目录即可。 查看 Customization 获取更多细节.
使用这种方法 Fooocus 和 Fooocus API 会同时存在,独立运行互不干扰。
除非你能确保已安装的 Fooocus 目录是一个 Git 仓库,否则不推荐直接将其复制到 repositories 目录。
开始之前,先安装 NVIDIA Container Toolkit,这是 Docker 可以使用 GPU 的前提。
运行
docker run -d --gpus=all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
-e NVIDIA_VISIBLE_DEVICES=all \
-p 8888:8888 konieshadow/fooocus-api
一个更实用的例子:
mkdir ~/repositories
mkdir -p ~/.cache/pip
docker run -d --gpus=all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
-e NVIDIA_VISIBLE_DEVICES=all \
-v ~/repositories:/app/repositories \
-v ~/.cache/pip:/root/.cache/pip \
-p 8888:8888 konieshadow/fooocus-api
这里把 repositories
和 pip cache
映射到了本地
你还可以添加 -e PIP_INDEX_URL={pypi-mirror-url}
选项来更换 pip 源
-h, --help
显示本帮助并退出--port PORT
设置监听端口,默认:8888--host HOST
设置监听地址,默认:127.0.0.1--base-url BASE_URL
设置返回结果中的地址,默认是: http://host:port--log-level LOG_LEVEL
Uvicorn 中的日志等级,默认:info--sync-repo SYNC_REPO
同步 Fooocus 仓库到本地,skip
用于在启动时跳过同步,only
只同步不启动程序--skip-pip
跳过启动时的 pip 安装--preload-pipeline
启动 http server 之前加载 pipeline--queue-size QUEUE_SIZE
工作队列大小,默认是 100 ,超过队列的请求会返回失败--queue-history QUEUE_HISTORY
保留的作业历史,默认 0 即无限制,超过会被删除,包括生成的图像--webhook-url WEBHOOK_URL
通知生成结果的 webhook 地址,默认为 None--persistent
持久化历史记录到SQLite数据库,默认关闭
从 v0.3.25 开始, Fooocus 的命令行选项也被支持,你可以在启动时加上 Fooocus 支持的选项
比如(需要更大的显存):
python main.py --all-in-fp16 --always-gpu
完成的 Fooocus 命令行选项可以在这儿找到。
[24/01/10] v0.3.29 : 支持将历史生成数据持久化到数据库,并且支持从数据库中读取历史数据
[24/01/09] v0.3.29 : Image Prompt Mixing requirements implemented, With this implementation, you can send image prompts, and perform inpainting or upscaling with a single request.
[24/01/04] v0.3.29 : 合并了 Fooocus v2.1.860
[24/01/03] v0.3.28 : 增加 text-to-image-with-ip 接口
[23/12/29] v0.3.27 : 增加 describe 接口,现在你可以使用图像反推提示词了
[23/12/29] v0.3.27 : 增加查询历史 API。增加 webhook_url 对所有请求的支持
[23/12/28] v0.3.26 : 重大变更: 添加 webhook 选项以支持生成完毕后的事件通知。将 async 的任务 ID 由数字改为 UUID 来避免应用重启后造成的混乱
[23/12/22] v0.3.25 : 增加对 Fooocus 命令行选项的支持 重大变更: 移除disable-private-log
选项,你可以使用 Fooocus 原生的 --disable-image-log
来达到同样的效果
[23/12/19] v0.3.24 : 该版本合并了 Fooocus v2.1.839, 包含一个对于 seed 的重大变更,详情参考:2.1.839.
[23/12/14] v0.3.23 : 合并 Fooocus v2.1.837.
[23/11/30] v0.3.22 : 支持自定义 upscale, 通过传递 upscale_value
给 upsacle api 来重写 upscale 值
[23/11/28] v0.3.21 : 增加 outpaint 自定义大小,感谢 freek99 提供的代码。当超出队列历史限制时,删除生成的图像。删除对输入分辨率的限制。现在你可以通过 width*height
给 aspect_ratios_selection
来指定任意分辨率。将 seed
字段的类型从 generation result
更改为字符串,以避免数字溢出。
更早的日志可以在 release page 找到
你可以在这里找到所有的 API 细节
感谢所有为改进 Fooocus API 做出贡献和努力的人。再次感谢 ✨ 社区万岁 ✨!