23-11-28 更新:新增了调用下文接口的前端页面,代码已托管在 GitHub
Cloudflare 更新了博文:https://blog.cloudflare.com/workers-ai-update-stable-diffusion-code-llama-workers-ai-in-100-cities/
使用自带的 AI 库似乎要提交注册信息加入等待列表(没细究,不确定),以及使用 Wrangler 框架,麻烦
但是既然可以通过 cURL 调用接口,那就可以糊一个 Workers:
export default {
async fetch(request, env, ctx) {
if(request.method != 'GET') {
return new Response("GET request only.", {
status: 200
})
}
let url = new URL(request.url);
let prompt = url.searchParams.get('p');
let steps = 20;
if (prompt == null || prompt == "") {
return new Response("No prompt provided.", {
status: 200
});
}
if (url.searchParams.get('s') != null) {
steps = parseInt(url.searchParams.get('s'));
if(isNaN(steps) || steps > 20 || steps < 0) {
return new Response("Invalid step, step must be in [0, 20]", {
status: 200
});
}
}
console.log(prompt, steps);
const UserID = env.UserID;
const Token = env.APIToken;
const CORS_DOMAIN = env.CORS_DOMAIN;
const CFApiEndpoint = `https://api.cloudflare.com/client/v4/accounts/${UserID}/ai/run/@cf/stabilityai/stable-diffusion-xl-base-1.0`;
const body = {
prompt: prompt,
num_steps: steps
};
const init = {
body: JSON.stringify(body),
method: "POST",
headers: {
"Authorization": `Bearer ${Token}`,
"content-type": "application/json;",
},
};
const response = await fetch(CFApiEndpoint, init);
return new Response(response.body, {
headers: {
"content-type": "image/png",
"Access-Control-Allow-Origin": CORS_DOMAIN
},
});
},
};
使用脚本前需要先在 Workers 设置环境变量 UserID 和 APIToken,分别代表 Cloudflare 账户 ID 和 Workers AI API 令牌
然后向 Workers 发送携带了 p(提示词)参数的 GET 请求即可
还有一个 s 参数,代表 Stable Diffusion 的采样 step,默认 20,最大也是 20
参数说明可以查看 https://developers.cloudflare.com/workers-ai/models/text-to-image/
由于生成图片需要时间,而脚本也没做前端页面/异步加载(对 JS 并不熟悉),发送请求后需要等待 Cloudflare 生成好图片后才有显示
仅作演示,完全可以改成 POST 请求来接受更长的 prompt,或者使用其他 Cloudflare 支持的模型
代码托管在 https://github.com/azhuge233/CF-Workers-Text2Img
效果
Continue reading "Cloudflare Workers 无服务器 AI 图片生成" →