FastAPI 是一个现代、快速(高性能)的Web框架,用于构建APIs。该项目基于 Fastapi 构建了 Fooocus 的 Rest 接口。
关于 Fooocus 的部分说明请参考 Fooocus 文档,该文档主要介绍接口部分。
和上一个 API 项目 Fooocus-API 相比,主要有以改动:
如果你从上一个项目而来,可以参考这个迁移指南
- 移除任务队列,不再单独维护一个队列
- 完全使用 Fooocus 的生成代码
- 可以和 WebUI 同时启动
- 移除了表单提交的接口,只保留了 JSON 提交的接口
- 主要功能合并到一个接口
- 简化参数结构,和 Fooocus 的 WebUI 保持一致
- 增加了流式输出功能
- preset 支持
- 更完整的任务历史记录功能
优点:
- 降低开发负载
- 更完整的 Fooocus 支持
- 更简单快捷的追踪 Fooocus 版本
- 完整的 Fooocus 支持
- 可以同时启动 API 以及 WebUI,或者选择不启动 WebUI
- 使用 X-API-KEY 进行接口认证
- all-in-one 接口
- 使用 URL 提供 INPUT 图像
- 接口提供了流式输出、二进制图像、异步任务、同步任务四种方式
- 持久化任务历史
- 增强的任务历史管理
- 任务查询功能
- 自定义 upscale 倍数,受限于 Fooocus,最大为 2800px
- preset 支持
- WebHook 支持
在 Fooocus 基础上多了数个依赖库,因此可以按照 Fooocus 的方式进行安装。
和 Fooocus 相同的启动方式,使用 --nowebui 参数可以启动 API 而不启动 WebUI。
默认的 API 端口是 WebUI 端口加 1,即 7866
环境变量 API_PORT 用于指定 API 端口,优先级高于默认设置。
同时启动 WebUI 和 API 示例:
python launch.py --listen 0.0.0.0 --port 7865仅启动 API 示例:
python launch.py --listen 0.0.0.0 --port 7865 --nowebui- 使用API密钥进行认证,密钥通过请求头
X-API-KEY传递。
使用 --apikey 指定接口认证密钥
POST /v1/engine/generate/
- 摘要: 生成API路由
- 请求体: 必须,JSON格式,基于
CommonRequest模型。 - 响应:
- 200: 成功响应,返回生成结果。
说明:
请求参数模型 CommonRequest 包含 WebUI 中的所有参数,但有些参数你需要在使用中特别注意,包含以下几类:
在 API 中无效的参数,这部分参数包含:
input_image_checkbox, 该参数总是被设置为 Trueinpaint_mask_upload_checkbox, 该参数总是被设置为 Trueinvert_mask_checkbox, 该参数总是被设置为 falsecurrent_tab, 该参数会检查参数中的图像信息并自动设置,检查顺序为 'ip' -> 'uov' -> 'inpaint'
不建议设置的参数:
generate_image_grid, 不清楚该参数的作用,建议保持 false
以下参数需要根据使用场景进行设置:
mixing_image_prompt_and_vary_upscalemixing_image_prompt_and_inpaint
此外,还包含部分 API 专用的参数:
preset, 可以使用该参数指定预设, 其优先级高于全局默认, 低于传递参数, 但如果传递参数等于默认值, 则使用预设参数stream_output, 设定为 true 后会返回流式输出, 默认 falserequire_base64, 该参数目前没有作用async_process, 是否异步任务, 默认为 false, 该参数和stream_output同时为false时, 表示执行同步任务webhook_url, Webhook 地址,如果设置了该参数,则任务完成后会发送 POST 请求到该地址
stream_output的优先级高于async_process, 即同时为 true 的时候, 返回流式输出。当全部为 false 时, 为同步任务, 会在任务完成后返回任务结果。如果指定 Accept: image/xxx 则返回二进制图像, 并设置 image_number 为 1, accept 具有最高优先级, 如无必要无需指定
POST /v1/engine/control/
- 标签: GenerateV1
- 摘要: 终止或跳过任务
- 描述: 终止或跳过任务,仅对当前任务有效,终止会将当前 task 停止,并进行下一个任务。跳过是将当前生成跳过,任务仍继续。
- 参数:
action(string): 操作类型,可以是"stop"或"skip"。
- 响应:
{"message": "{message}"}
GET /tasks
- 标签: Query
- 摘要: 获取所有任务
- 描述: 根据类型过滤任务,并支持分页和时间过滤。
- 参数:
query(string): 默认值: "all", 任务类型,可以是"all", "history", 或 "current"。page(integer): 默认值: 0, 返回的页码,用于历史和待办任务。page_size(integer): 默认值: 10, 每页返回的任务数量。start_at(string): 过滤任务的开始时间, 仅对 history 生效。ISO8601 格式的时间,比如: "2024-06-30T17:57:07.045812"end_at(string): 默认值为 ISO8601 格式的时间,比如: "2024-06-30T17:57:07.045812",过滤任务的结束时间, 仅对 history 生效action(string): 删除操作专用, 仅对 history 生效, 会删除数据库中记录以及生成的图片。
- 响应:
- 200: {"history": List[RecordResponse], "current": List[RecordResponse], "pending": List[RecordResponse]}
尽管都是基于 RecordResponse 模型,但 current 会多一个 preview 字段
GET /tasks/{task_id}
- 标签: Query
- 摘要: 通过ID获取特定任务
- 参数:
task_id(string): 任务的ID。
- 响应:
- 200: RecordResponse
GET /v1/engines/all-models
- 标签: Query
- 摘要: 获取所有模型
- 响应:
- 200: 成功响应,返回所有本地 checkpoint 和 lora 模型。
GET /v1/engines/styles
- 标签: Query
- 摘要: 获取所有风格
- 响应:
- 200: 成功响应,返回所有风格列表。
GET /outputs/{date}/{file_name}
- 标签: Query
- 摘要: 通过ID获取特定输出
- 参数:
date(string): 日期,生成的图片以天为单位创建的文件夹进行归类, 该部分即生成日期。file_name(string): 文件的名称。
- 响应:
- 200: 成功响应,返回特定输出的内容。
- 422: 验证错误。
如果在
Accept中指定了image/xxx服务器会将图片转换格式后返回, 可以使用image/pngimage/jpegimage/webpimage/jpg, 对于 input 同样适用
POST /v1/tools/describe-image
- 标签: GenerateV1
- 摘要: 描述图像,从图像获取标签
- 描述: 根据提供的图像和图像类型(照片或动漫),返回描述。
- 参数:
image_type(string, 默认值: "Photo"): 图像类型。
- 请求体: 必须,
multipart/form-data格式,包含图像文件。 - 响应:
- 200: 成功响应,返回
DescribeImageResponse模型。 - 422: 验证错误。
- 200: 成功响应,返回
GET /
- 标签: Query
- 摘要: 根端点
- 响应: 自动跳转到
/docs
- 属性:
prompt(string): 生成图像的提示。negative_prompt(string): 过滤不需要的内容的提示。style_selections(array): 生成图像的风格选择。performance_selection(Performance): 性能选择,默认Speed,可选QualitySpeedExtreme SpeedLightningHyper-SDaspect_ratios_selection(string): 生成图像的宽高比选择。默认 1152*896image_number(int): 生成图像的数量。默认 1,范围 1-32output_format(string): 生成图像的输出格式,默认png,可选jpgwebpimage_seed(int): 生成图像的种子,默认 -1 即随机read_wildcards_in_order(bool): 是否读取提示中的通配符,默认 falsesharpness(float): 生成图像的锐度,默认 2.0,范围 0.0-30.0guidance_scale(float): 生成图像的指导比例,默认 4,范围 1.0-30.0base_model_name(string): 基础模型名称,当前默认juggernautXL_v8Rundiffusion.safetensorsrefiner_model_name(string): refiner 模型名称,当前默认为 Nonerefiner_switch(float): refiner 切换时机,默认 0.5,范围0.1-1.0loras(Lora): 使用的 lora 列表,默认只使用一个sd_xl_offset_example-lora_1.0.safetensors,格式参考 Lorainput_image_checkbox(bool): 是否使用输入图像,默认 false,该参数无效,程序会总是将它设置为 Truecurrent_tab(string): 当前激活的标签页,默认uov,可选uovinpaintoutpaint,你无需传递该参数。uov_method(string): 生成图像的 UOV 方法,默认disable,可选项参考 UpscaleOrVaryMethoduov_input_image(string): Upscale or vary 输入图像的 URL 或者 Base64 格式的图片,默认 "None"outpaint_selections(array): Outpaint 方向列表,比如 ["Left", "Right", "Top", "Bottom"]inpaint_input_image(string): Inpaint 输入图像的 URL 或者 Base64 格式的图片inpaint_additional_prompt(string): Inpaint 额外提示,默认 "None"inpaint_mask_image_upload(string): Inpaint 遮罩图像的 URL 或者 Base64 格式的图片inpaint_mask_upload_checkbox(bool): 默认为 false,但程序总是将它设置为 Truedisable_preview(bool): 是否禁用预览,默认 falsedisable_intermediate_results(bool): 是否禁用中间结果,默认 falsedisable_seed_increment(bool): 是否禁用种子递增,默认 falseblack_out_nsfw(bool): 是否将 NSFW 内容替换为黑色,默认 falseadm_scaler_positive(float): The scaler multiplied to positive ADM (use 1.0 to disable). 默认 1.5,范围 0.0-3.0adm_scaler_negative(float): The scaler multiplied to negative ADM (use 1.0 to disable). 默认 1.5,范围 0.0-3.0adm_scaler_end(float): ADM Guidance End At Step,默认 0.8,范围 0.0-1.0adaptive_cfg(float): Adaptive cfg,默认 7,范围 1.0-30.0clip_skip(float): 生成图像的 clip skip,默认 2,范围 1-12sampler_name(string): 采样器名称,默认 dpmpp_2m_sde_gpuscheduler_name(string): 调度器名称,默认 karrasvae_name(string): VAE 名称,默认 Default (model)overwrite_step(int): 覆盖 Performance 中的默认步数,默认 -1 不覆盖overwrite_switch(float): 覆盖 refiner_switch,默认 -1 不覆盖overwrite_width(int): 覆盖 aspect_ratios_selection 中的 width,默认 -1 不覆盖,范围 -1-2048overwrite_height(int): 覆盖 aspect_ratios_selection 中的 height,默认 -1 不覆盖,范围 -1-2048overwrite_vary_strength(float): 覆盖 vary_strength,默认 -1 不覆盖,范围 0.0-1.0overwrite_upscale_strength(float): 覆盖 upscale_strength,默认 -1 不覆盖,范围 0.0-1.0mixing_image_prompt_and_vary_upscale(bool): 同时使用 uov 和 imagePrompt,默认 false,该选项不会自动判断,如需使用请指定mixing_image_prompt_and_inpaint(bool): 同时使用 uov 和 inpaint,默认 false,该选项不会自动判断,如需使用请指定debugging_cn_preprocessor(bool): 是否启用 ControlNet 预处理调试模式,默认 falseskipping_cn_preprocessor(bool): 跳过 ControlNet 预处理,默认 falsecanny_low_threshold(int): 默认 64,范围 1-255canny_high_threshold(int): 默认 128,范围 1-255refiner_swap_method(string): 默认 jointcontrolnet_softness(float): 默认 0.25,范围 0.0-1.0freeu_enabled(bool): 是否启用 freeu,默认 falsefreeu_b1(float): 默认 1.01freeu_b2(float): 默认 1.02freeu_s1(float): 默认 0.99freeu_s2(float): 默认 0.95debugging_inpaint_preprocessor(bool): 是否启用 Inpaint 预处理调试模式,默认 falseinpaint_disable_initial_latent(bool): 默认 falseinpaint_engine(string): 默认 v2.6inpaint_strength(float): 默认 1.0,范围 0.0-1.0inpaint_respective_field(float): 默认0.618,范围 0.0-1.0invert_mask_checkbox(bool): 默认 false,该参数总是被设置为 falseinpaint_erode_or_dilate(int): 默认 0,范围 -64-64save_metadata_to_images(bool): 是否保存元数据到图像中,默认 truemetadata_scheme(string): 默认 foocus,可选 fooocus, a111controlnet_image(ImagePrompt): ImagePromptgenerate_image_grid(bool): 默认 false,在 API 中应该没有作用,建议保持默认outpaint_distance(List[int]): Outpaint 距离,默认 [0, 0, 0, 0],左,上,右,下,该参数必须与outpaint_selections一起使用upscale_multiple(float): 默认 1.0,范围 1.0-5.0,仅在 upscale method 为Upscale (Custom)时有效preset(string): 预设名称,默认 initialstream_output(bool): 是否流式输出,默认 falserequire_base64(bool): 暂时无用async_process(bool): 是否异步处理,默认 falsewebhook_url(string): Webhook URL,默认 ""
- 属性:
enabled(bool): 是否启用 Lora,默认 falsemodel_name(string): Lora 名称,默认 Noneweight(float): Lora 权重,默认 0.5,范围 -2-2
- 属性:
- "Disabled"
- "Vary (Subtle)"
- "Vary (Strong)"
- "Upscale (1.5x)"
- "Upscale (2x)"
- "Upscale (Fast 2x)"
- "Upscale (Custom)"
- 属性:
cn_img(str): ImageUrl 或者 base64 格式图片cn_stop(float): 默认 0.6,范围 0-1cn_weight(float): 默认 0.5,范围 0-2cn_type(string): 默认 ImagePrompt,可选 FaceSwap,PyraCanny,CPDS
- 属性:
describe(string): 图像描述。
- 属性:
id(int): 数据库 ID,对于返回来说是无用的。task_id(str): 任务 ID,任务 ID,使用uuid.uuid4().hex生成。req_params(CommonRequest): 请求参数,对于图片,会转换为 URL。in_queue_mills(int): 任务进入队列的时间(毫秒)。start_mills(int): 任务开始处理的时间(毫秒)。finish_mills(int): 任务完成处理的时间(毫秒)。task_status(str): 任务状态。progress(float): 任务进度。preview(str): 任务预览。webhook_url(str): 任务 Webhook URL。result(List): 任务结果。
该项目源自 Fooocus-API, 感谢所有参与该项目的开发者。