diff --git a/docs/products/apis/images-vision/controlnet.md b/docs/products/apis/images-vision/controlnet.md new file mode 100644 index 0000000000000000000000000000000000000000..a00b796e88810a8ef234e74dd77bb67fd9bc239f --- /dev/null +++ b/docs/products/apis/images-vision/controlnet.md @@ -0,0 +1,147 @@ +--- +sidebar_position: 8 +--- + +# 图像类 ControlNet + +## 功能描述 + +`ControlNet` 是一种基于条件生成的模型,它可以根据输入的条件(如文本、图像等)生成符合条件的图像。在文生图和图像编辑任务中, +`ControlNet` 可以用于生成符合特定条件的图像,如特定风格的图像、特定场景的图像等。 + +## 支持 ControlNet 的模型 + +- [Flux.1-dev]({{SITE_URL}}/serverless-api?model=flux-1-dev&tab=info) + +## 体验接口效果 + +### 功能说明 + +Serverless API 提供了接口快速体验的界面,可以快速体验接口效果。 +打开 [Serverless API 页面]({{SITE_URL}}/serverless-api?model=FLUX.1-dev&operation=333) ,找到图像生成与处理下的 +`FLUX.1-dev` 模型,点击进入接口详情页。 + +![image](../../../../static/img/serverless-api/flux-1-dev-controlnet.png) + +文生图(ControlNet)接口中,启用 ControlNet 功能后,需要设置 ControlNet 模型的参数。 + +ControlNet 参数说明: + +- **control_image**:控制图像,用作生成图片时的参考图,比如指定人物姿势或轮廓,让生成结果更符合预期。控制图像可以是本地图片路径,也可以是图片 + URL。 +- **controlnet_type**:ControlNet 模型的类型,可选值为 `canny`、`depth`,其中 `canny` 是边缘检测,`depth` + 是深度估计,用于指导生成图片的风格或结构。。 +- **controlnet_conditioning_scale**:ControlNet 模型对基础模型的影响程度,范围为 0 到 1 之间的浮点数,默认值为 + 0.5。值越大,参考图的影响越强。 +- **controlnet_guidance_start**:ControlNet 模型的引导开始时间,范围为 0 到 1 之间的浮点数,默认值为 0.2。 +- **controlnet_guidance_end**:ControlNet 模型的引导结束时间,范围为 0 到 1 之间的浮点数,默认值为 0.8。 + +## 调用文生图模型 + +### 使用 OpenAI SDK + +以下将说明如何通过 OpenAI SDK 使用 `FLUX.1-dev` 文生图 `ControlNet` 接口。以下是一个使用 Python 的示例: + +```python showLineNumbers title="python" +from openai import OpenAI +import base64 +import requests + +client = OpenAI( + base_url="https://ai.gitee.com/v1", + api_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +) + +response = client.images.generate( + prompt="A robot sitting on open grassland, painting on a canvas.", + model="FLUX.1-dev", + size="1024x1024", + extra_body={ + "num_inference_steps": 20, + "guidance_scale": 7.5, + "seed": 42, + "control_image": "https://example.com/image.png", # 替换为您的控制图像 URL 或图片 base64 编码字符串 + "control_type": "canny", + "controlnet_conditioning_scale": 0.5, + "control_guidance_start": 0.8, + "control_guidance_end": 0.2, + }, +) + +for i, image_data in enumerate(response.data): + if image_data.url: + # Download from URL + ext = image_data.url.split('.')[-1].split('?')[0] or "jpg" + filename = f"FLUX.1-dev-output-{i}.{ext}" + response = requests.get(image_data.url, timeout=30) + response.raise_for_status() + with open(filename, "wb") as f: + f.write(response.content) + print(f"Downloaded image to {filename}") + elif image_data.b64_json: + # Decode base64 + image_bytes = base64.b64decode(image_data.b64_json) + filename = f"FLUX.1-dev-output-{i}.jpg" + with open(filename, "wb") as f: + f.write(image_bytes) + print(f"Saved image to {filename}") +``` + +### 使用 Requests 库 + +如果您不想使用 OpenAI 的 SDK,也可以直接使用 `requests` 库来调用文生图模型。以下是一个使用 Python 的示例: + +```python showLineNumbers title="python" +import requests +import base64 +import json + +url = "{{SITE_URL}}/v1/images/generations" + +headers = { + "Authorization": "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", # 替换为您的 API Key + "Content-Type": "application/json", + "X-Failover-Enabled": "true" +} + +data = { + "prompt": "a white siamese cat", # 替换为您的文本描述 + "model": "FLUX.1-dev", # 替换为您选择的模型名称 + "size": "1024x1024", + "seed": 42, + "response_format": "b64_json", + "num_inference_steps": 25, + "guidance_scale": 7.5, + "control_image": "https://example.com/image.png", # 替换为您的控制图像 URL 或图片 base64 编码字符串 + "control_type": "canny", + "controlnet_conditioning_scale": 0.5, + "control_guidance_start": 0.8, + "control_guidance_end": 0.2, +} + +response = requests.post(url, headers=headers, json=data) + +if response.status_code == 200: + for i, image_data in enumerate(response.data): + if image_data.url: + # Download from URL + ext = image_data.url.split('.')[-1].split('?')[0] or "jpg" + filename = f"FLUX.1-dev-output-{i}.{ext}" + response = requests.get(image_data.url, timeout=30) + response.raise_for_status() + with open(filename, "wb") as f: + f.write(response.content) + print(f"Downloaded image to {filename}") + elif image_data.b64_json: + # Decode base64 + image_bytes = base64.b64decode(image_data.b64_json) + filename = f"FLUX.1-dev-output-{i}.jpg" + with open(filename, "wb") as f: + f.write(image_bytes) + print(f"Saved image to {filename}") +else: + print(f"请求失败,状态码: {response.status_code}") + print(f"错误信息: {response.text}") +``` + +其他编程语言可以参考 [接口文档]({{SITE_URL}}/docs/openapi/v1#tag/图像生成/post/async/images/generations) 中的示例代码。 diff --git a/docs/products/apis/images-vision/lora.md b/docs/products/apis/images-vision/lora.md new file mode 100644 index 0000000000000000000000000000000000000000..d9a42e755fdba7c06f79f045f877ed74525b5971 --- /dev/null +++ b/docs/products/apis/images-vision/lora.md @@ -0,0 +1,147 @@ +--- +sidebar_position: 7 +--- + +# 图像类 LoRA + +## 功能描述 + +`LoRA` 指的是低秩适应(Low-Rank Adaptation),是一种在预训练模型基础上进行微调的方法。`LoRA` +可以在不改变预训练模型权重的情况下,通过引入低秩矩阵来适应新的任务。在文生图和图像编辑任务中,`LoRA` +可以用于微调预训练的图像模型,使其在特定的任务上表现更好。 + +## 支持 LoRA 的模型 + +- [Flux.1-dev]({{SITE_URL}}/serverless-api?model=flux-1-dev&tab=info) +- [Flux.1-schnell]({{SITE_URL}}/serverless-api?model=flux-1-schnell&tab=info) +- [Flux.1-Kontext-dev]({{SITE_URL}}/serverless-api?model=FLUX.1-Kontext-dev&tab=info) +- [InstantCharacter]({{SITE_URL}}/serverless-api?model=InstantCharacter&tab=info) +- [OmniConsistency]({{SITE_URL}}/serverless-api?model=OmniConsistency&tab=info) +- [stable-diffusion-xl-base-1.0]({{SITE_URL}}/serverless-api?model=stable-diffusion-xl-base-1.0&tab=info) + +## 体验接口效果 + +### 功能说明 + +Serverless API 提供了接口快速体验的界面,可以快速体验接口效果。 +打开 [Serverless API 页面]({{SITE_URL}}/serverless-api?model=flux-1-dev) ,找到图像生成与处理下的 `Flux.1-dev` +模型,点击进入接口详情页。 + +![image](../../../../static/img/serverless-api/flux-1-dev-lora.png) + +文生图接口中,LoRA 设置中 `url` 是需要加载的 LoRA 模型的 URL,`weight` 是用于不同 LoRA 模型权重之间的加权融合,`lora_scale` +是 LoRA 模型对基础模型的影响程度。 + +## 调用文生图模型 + +### 使用 OpenAI SDK + +以下将说明如何通过 OpenAI SDK 使用 `Flux.1-dev` 文生图 `LoRA` 接口。以下是一个使用 Python 的示例: + +```python showLineNumbers title="python" +from openai import OpenAI +import base64 +import requests + +client = OpenAI( + base_url="{{SITE_URL}}/v1", + api_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", # 替换为您的 API Key +) + +response = client.images.generate( + prompt="A robot sitting on open grassland, painting on a canvas.", + model="FLUX.1-dev", + size="1024x1024", + extra_body={ + "num_inference_steps": 20, + "guidance_scale": 7.5, + "seed": 42, + "lora_weights": [ + { + "url": "https://example.com/lora-model.safetensors", # 替换为您的 LoRA 模型 URL + "weight": 1, + } + ], + "lora_scale": 0.5 + }, +) + +for i, image_data in enumerate(response.data): + if image_data.url: + # Download from URL + ext = image_data.url.split('.')[-1].split('?')[0] or "jpg" + filename = f"FLUX.1-dev-output-{i}.{ext}" + response = requests.get(image_data.url, timeout=30) + response.raise_for_status() + with open(filename, "wb") as f: + f.write(response.content) + print(f"Downloaded image to {filename}") + elif image_data.b64_json: + # Decode base64 + image_bytes = base64.b64decode(image_data.b64_json) + filename = f"FLUX.1-dev-output-{i}.jpg" + with open(filename, "wb") as f: + f.write(image_bytes) + print(f"Saved image to {filename}") +``` + +### 使用 Requests 库 + +如果您不想使用 OpenAI 的 SDK,也可以直接使用 `requests` 库来调用文生图模型。以下是一个使用 Python 的示例: + +```python showLineNumbers title="python" +import requests +import base64 +import json + +url = "{{SITE_URL}}/v1/images/generations" + +headers = { + "Authorization": "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", # 替换为您的 API Key + "Content-Type": "application/json", + "X-Failover-Enabled": "true" +} + +data = { + "prompt": "a white siamese cat", # 替换为您的文本描述 + "model": "FLUX.1-dev", # 替换为您选择的模型名称 + "size": "1024x1024", + "seed": 42, + "response_format": "b64_json", + "num_inference_steps": 25, + "guidance_scale": 7.5, + "lora_weights": [ + { + "url": "https://example.com/lora-model.safetensors", # 替换为您的 LoRA 模型 URL + "weight": 1, + } + ], + "lora_scale": 0.5 +} + +response = requests.post(url, headers=headers, json=data) + +if response.status_code == 200: + for i, image_data in enumerate(response.data): + if image_data.url: + # Download from URL + ext = image_data.url.split('.')[-1].split('?')[0] or "jpg" + filename = f"FLUX.1-dev-output-{i}.{ext}" + response = requests.get(image_data.url, timeout=30) + response.raise_for_status() + with open(filename, "wb") as f: + f.write(response.content) + print(f"Downloaded image to {filename}") + elif image_data.b64_json: + # Decode base64 + image_bytes = base64.b64decode(image_data.b64_json) + filename = f"FLUX.1-dev-output-{i}.jpg" + with open(filename, "wb") as f: + f.write(image_bytes) + print(f"Saved image to {filename}") +else: + print(f"请求失败,状态码: {response.status_code}") + print(f"错误信息: {response.text}") +``` + +其他编程语言可以参考 [接口文档]({{SITE_URL}}/docs/openapi/v1#tag/图像生成/post/async/images/generations) 中的示例代码。 diff --git a/static/img/serverless-api/flux-1-dev-controlnet.png b/static/img/serverless-api/flux-1-dev-controlnet.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9d8740b07b4f04843b725c3d00adf345ca8f45 Binary files /dev/null and b/static/img/serverless-api/flux-1-dev-controlnet.png differ diff --git a/static/img/serverless-api/flux-1-dev-lora.png b/static/img/serverless-api/flux-1-dev-lora.png new file mode 100644 index 0000000000000000000000000000000000000000..76ed69b8edb87f0b9dd9e7868f70f66dd422e86d Binary files /dev/null and b/static/img/serverless-api/flux-1-dev-lora.png differ