快速创建一个生成漫画插图接口
从0到1快速创建一个生成漫画插图接口
方案概览
用户自己手动在智作工坊控制台创建对应的应用,调试需要的工作流,并且发布为一个可以调用的接口,之后使用对应的语言的 SDK 接入,并且调用获取到 ComfyUI 任务的结果。基于智作工坊的控制台和提供的各语言版本 SDK,可以快速调试自己需要的工作流,并且部署为API接口供调用。
部署准备
开始部署前,请按以下指引完成账号申请、账号充值。
准备账号
如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。
开通智作工坊
参考智作工坊服务开通文档:服务开通
快速体验
新建工作流
点击新建工作流
填写工作流信息,以及选择需要的工作流模板,这里选择文生图模板,点击确认
点击之后将会跳转到工作流编辑界面,等待页面加载完毕之后,显示如下:
运行查看效果
修改节点中的正向提示词和反向提示词,点击右上角运行工作流查看效果
等待工作流执行
执行结束,查看结果如下图
部署工作流为接口
发布工作流
确认工作流可以执行得到结果后,点击发布,进入发布菜单
填入版本描述:填入简单文生图测试
设置工作流入参:在这里可以设置接口服务对外暴露的参数,其他未暴露的参数值默认使用工作流中的值。若调用时为传递设置的参数,也默认是工作流中的参数。
点击下方添加按钮,可以添加新的参数
添加之后确认设置好的参数,含义如下,注意
#3
会显示在工作流右上角,方便对应关系如果需要修改参数
点击字段对应的编辑,可以编辑参数别名
编辑态:
编辑好之后,回车保存
发布工作流:确认无误之后,点击提交发布。
发布之后可以看到生成对应的接口版本管理信息
为工作流指定别名
点击别名管理tab,点击新建别名按钮,填写接口调用别名名称,选择别名当前对应的主版本,后续更新接口版本只需要在此替换版本即可,无需修改代码中的版本ID。
点击确认,得到如下效果:
复制对应的别名备用,这里是
t2i_0821
应用创建获取AKSK
接口发布之后,想要调用接口,需要先新建应用,使用应用的AKSK通过SDK调用。打开智作工坊控制台应用管理tab页
点击右上角创建应用
填写应用名称以及应用类型,点击确认
确认后会自动跳转应用详情页,复制对应的AK、SK备用
代码调用
获取到应用的 AKSK、以及工作流别名,需要使用对应语言的SDK调用,这里以Python为例,其余语言参考各语言SDK参考
参考指南完成接入:Python接入指南
替换 main.py 其中的 AKSK、工作流ID、工作流别名和参数如下:
from client import Client from proto import ComfyRequest, ComfyResponse, PredictResultResponse, ProgressResponse import time import json cli = Client( endpoint="openai.edu-aliyun.com", app_key="替换AK", app_secret="替换SK" ) # 原始调用方法 def call(url, body, method='POST', headers=None): # 忽略 def comfy_prompt(prompt: ComfyRequest, custom_resource_config_id='default') -> ComfyResponse: # 忽略内容 if __name__ == '__main__': begin = time.time() # 工作流别名 alias_id = "替换为工作流别名" workflow_id = "替换为控制台上的工作流 ID" params = { "prompt": "提示词" } result = comfy_prompt(ComfyRequest(alias_id=alias_id, workflow_id=workflow_id, inputs=params)) print("生图结果:" + str(result)) print("时间消耗: %.2fs" % (time.time() - begin))
查看效果
执行之后可以获取结果,示例结果为:
{
"status": 10,
"err_code": null,
"err_message": null,
"sub_err_code": null,
"sub_err_message": null,
"api_invoke_id": "i_66c5a89c9b80590025596496",
"data": {
"task_id": "01j5t1n78pcvmjsdbsp5jd52hq",
"images": [
"http://xxx"
],
"info": {},
"parameters": null,
"status": "succeeded",
"imgs_bytes": null
}
}
返回的结果如下:
修改工作流为漫画插画并更新接口
修改工作流
保存下面的 json 文件为
cartoon_comic.json
{ "3": { "inputs": { "seed": 568422393720372, "steps": 4, "cfg": 1.5, "sampler_name": "dpmpp_sde", "scheduler": "karras", "denoise": 1, "model": [ "27", 0 ], "positive": [ "28", 0 ], "negative": [ "29", 0 ], "latent_image": [ "30", 0 ] }, "class_type": "KSampler", "_meta": { "title": "KSampler" } }, "8": { "inputs": { "samples": [ "3", 0 ], "vae": [ "27", 2 ] }, "class_type": "VAEDecode", "_meta": { "title": "VAE Decode" } }, "15": { "inputs": { "text_positive": [ "31", 0 ], "text_negative": [ "26", 0 ], "milehigh": "Xilam_Comics_Animation", "log_prompt": false }, "class_type": "MilehighStyler", "_meta": { "title": "Milehigh Styler" } }, "25": { "inputs": { "text": "孙悟空漫画登上天堂并开始在天堂肆虐", "choose_to_language": "en" }, "class_type": "AlibabaTransApi", "_meta": { "title": "阿里翻译Api" } }, "26": { "inputs": { "text": "(worst quality, low quality:1.4),(depth of field, blurry:1.2),(greyscale, monochrome:1.1),cropped,lowres,text,(nsfw:1.3),(worst quality:2),(low quality:2),(normal quality:2),((grayscale)),skin spots,acnes,skin blemishes,age spot,(ugly:1.331),(duplicate:1.331),(morbid:1.21),(mutilated:1.21),(tranny:1.331),mutated hands,(poorly drawn hands:1.5),blurry,(bad anatomy:1.21),(bad proportions:1.331),(disfigured:1.331),(missing arms:1.331),(extra legs:1.331),(fused fingers:1.61051),(too many fingers:1.61051),(unclear eyes:1.331),lowers,bad hands,missing fingers,extra digit,bad hands,(((extra arms and legs))),nsfw, (worst quality, low quality:1.4),(depth of field, blurry:1.2),(greyscale, monochrome:1.1),3D face,cropped,lowres,text,(nsfw:1.3),(worst quality:2),(low quality:2),(normal quality:2),((grayscale)),skin spots,acnes,skin blemishes,age spot,(ugly:1.331),(duplicate:1.331),(morbid:1.21),(mutilated:1.21),(tranny:1.331),mutated hands,(poorly drawn hands:1.5),blurry,(bad anatomy:1.21),(bad proportions:1.331),(disfigured:1.331),(missing arms:1.331),(extra legs:1.331),(fused fingers:1.61051),(too many fingers:1.61051),(unclear eyes:1.331),lowers,bad hands,missing fingers,extra digit,bad hands,(((extra arms and legs)))", "choose_to_language": "en" }, "class_type": "AlibabaTransApi", "_meta": { "title": "阿里翻译Api" } }, "27": { "inputs": { "ckpt_name": "XL-Lightning-梦幻_Lightning-4Step.safetensors" }, "class_type": "CheckpointLoaderSimple", "_meta": { "title": "Load Checkpoint" } }, "28": { "inputs": { "text": [ "15", 0 ], "clip": [ "27", 1 ] }, "class_type": "CLIPTextEncode", "_meta": { "title": "CLIP Text Encode (Prompt)" } }, "29": { "inputs": { "text": [ "15", 1 ], "clip": [ "27", 1 ] }, "class_type": "CLIPTextEncode", "_meta": { "title": "CLIP Text Encode (Prompt)" } }, "30": { "inputs": { "width": 512, "height": 768, "batch_size": 1 }, "class_type": "EmptyLatentImage", "_meta": { "title": "Empty Latent Image" } }, "31": { "inputs": { "safe_check": true, "text": [ "25", 0 ] }, "class_type": "AlibabaTextContentSafeApi", "_meta": { "title": "阿里文本内容安全Plus" } }, "32": { "inputs": { "safe_check": true, "safe_confidence_level": 0, "oss_bucket_name": "sd-fc-prod", "images": [ "8", 0 ] }, "class_type": "SaveImageWithContentSafeApi", "_meta": { "title": "保存图片with阿里图片内容安全Plus" } } }
选择自己刚刚创建的工作流,点击进入工作流调试界面
点击导入按钮,导入工作流文件:
发布工作流 & 版本更新
导入后点击右上角运行工作流确认无误后,点击发布
由于工作流变化较大,节点之间的映射失效,需要先删除旧的映射关系,再使用新的节点路径映射,如下图操作:
修改后的效果如下,点击提交发布
发布之后会显示新的版本号:
由于之前设置了别名,只需要在别名管理替换新的主版本即可:
新接口测试
直接运行刚刚的测试代码,返回的结果如下,可以看到已生效: