Cloudflare 的 Workers 支持调用浏览器自动化框架,免费用户有 10 分钟/每日的额度,支持同时使用三个浏览器实例(Pricing),体验体验

以下内容包含 Wrangler 的安装以及 Cloudflare 浏览器呈现(Playwright)的基本使用

环境

  • Windows 11

参考

步骤

Wrangler 环境配置

浏览器呈现的实现(脚本编写、本地测试、线上发布)依赖 Wrangler 环境

安装 Volta

Volta 用于本地 Node.js 的版本管理

使用 winget 安装,执行指令

winget install Volta.Volta

安装后可能需要重启 PowerShell 窗口

安装 Node 环境

使用 Volta 安装 Node.js,执行指令 Continue reading "Cloudflare Browser Rendering 的基本使用"

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 图片生成"