Fooocus 的安装和API的使用 - 蝈蝈俊
内容提要
Fooocus是一款基于Gradio的图像生成软件,集成了Stable Diffusion和Midjourney的特点。它支持api接口调用,并提供了安装过程中的问题解决方案。安装Fooocus-API时可能会遇到获取Fooocus失败的问题,解决方法是直接使用github desktop下载。API使用示例代码包括异步发起文生图任务和查询任务完成情况。
延伸解读
两种 API 路径的选择
文章指出 Fooocus 原生 API 基于 Gradio client,作者认为“不太好用”,因此推荐了第三方项目 Fooocus-API,它用 FastAPI 构建 REST API。这意味着如果你需要更规范的 HTTP 接口,可以优先考虑后者;但也要注意它并非官方维护,安装和兼容性可能带来额外问题。
安装报错的两个典型场景
安装过程中可能遇到两类问题:一是 Torch 未编译 CUDA 支持,需先安装 cudatoolkit 并卸载重装 Torch;二是 Fooocus-API 自动克隆 Fooocus 仓库失败,报“服务器返回的信息无效或不可识别”。后者可通过 GitHub Desktop 手动下载到指定目录,并启动时加 --sync-repo=skip 跳过同步来解决。
异步任务与结果查询的配合
示例代码展示了异步文生图流程:提交任务时设置 async_process 为 True,立即返回 job_id;之后用该 ID 调用查询接口获取任务状态和图片地址。查询结果中 job_result 包含图片 URL,同时本地 outputs 日期目录下也会保存文件。这种模式适合批量提交任务,避免长时间阻塞等待。
局域网访问的启动参数
启动 Fooocus-API 时使用 --host=0.0.0.0,是为了让局域网内其他机器也能访问服务。示例代码中的 host 也使用了局域网 IP(如 192.168.1.17:8888),说明作者是在多设备环境下调用 API。如果你只在本地使用,可以不改这个参数;若需对外提供服务,则要留意网络安全。
Q&A
Fooocus 是什么?它有哪些主要特点?
Fooocus 是一款基于 Gradio 的图像生成软件,集成了 Stable Diffusion 和 Midjourney 的特点:像 Stable Diffusion 一样离线、开源、免费;像 Midjourney 一样无需手动调整,用户只需专注于提示和图像。
安装 Fooocus 时遇到 'Torch not compiled with CUDA enabled' 错误该如何解决?
先安装 cudatoolkit:运行 conda config --append channels conda-forge、conda config --append channels nvidia、conda install cudatoolkit。如果已安装 Torch,则在运行 python entry_with_update.py 之前先卸载 Torch(pip uninstall torch),再重新执行安装流程。
安装 Fooocus-API 时获取 Fooocus 失败,提示 '服务器返回的信息无效或不可识别',怎么办?
使用 GitHub Desktop 手动下载 Fooocus 到 ./repositories/Fooocus 目录,然后启动时使用命令:python main.py --sync-repo=skip --host=0.0.0.0。其中 --sync-repo=skip 跳过自动同步,--host=0.0.0.0 允许局域网访问。
如何通过 API 异步发起一个文生图任务?
使用 POST 请求发送到 /v1/generation/text-to-image,请求体为 JSON 格式,包含 prompt、image_seed 等参数,并设置 async_process 为 True。示例代码中通过 requests.post 发送请求,返回结果包含 job_id,用于后续查询任务状态。
如何查询文生图任务的状态和生成的图片地址?
使用 GET 请求访问 /v1/generation/query-job,参数包括 job_id 和 require_step_preivew(设为 False)。返回的 JSON 中 job_result 包含图片的 URL 地址,例如 http://127.0.0.1:8888/files/2024-01-18/xxx.png。
启动 Fooocus-API 时,--sync-repo=skip 和 --host=0.0.0.0 参数分别有什么作用?
--sync-repo=skip 表示启动时跳过同步 Fooocus 仓库的步骤,需要手动同步;--host=0.0.0.0 表示绑定到所有网络接口,使得局域网内的其他机器可以访问该服务。