openwebui 视频生成模型接入

之前刷论坛看到有大佬编写了个openwebui接入硅基流动的视频生成模型,但我用了下,等待时间过长,并且有概率出现请求失败的情况,并且在生成的时候没办法离开这个页面。

于是我参考大佬的代码,并使用cf worker中转,实现了可以刷新后台等待的接入方式。

cf worker设置

代码
export default {
  async fetch(request, env) {
    let url = new URL(request.url);
    let path = url.pathname;
    
    if (request.method === 'POST' && path === '/video/submit') {
      const authHeader = request.headers.get('Authorization');
      if (!authHeader || !checkAuthorization(authHeader, env)) {
        return new Response('Forbidden', { status: 403 });
      }
      return handleProxy(request, env, 'https://api.siliconflow.cn/v1/video/submit');
    } else if (request.method === 'POST' && path === '/video/status') {
      return handleProxy(request, env, 'https://api.siliconflow.cn/v1/video/status');
    } else if (request.method === 'OPTIONS') {
      // Handle preflight requests for CORS
      return new Response(null, {
        status: 204,
        headers: {
          'Access-Control-Allow-Origin': '*',
          'Access-Control-Allow-Methods': 'POST, OPTIONS',
          'Access-Control-Allow-Headers': 'Content-Type, Authorization',
          'Access-Control-Max-Age': '86400',
        }
      });
    } else {
      return new Response('Not Found', { status: 404 });
    }
  }
};

async function handleProxy(request, env, targetUrl) {
  const response = await fetch(targetUrl, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${env.AUTH_TOKEN}`,
      'Content-Type': 'application/json'
    },
    body: request.body // 直接转发请求的body部分
  });
  // Create a new response and pass through the status and headers from the origin response
  const newResponse = new Response(response.body, {
    status: response.status,
    headers: {
      'Content-Type': response.headers.get('Content-Type'),
      'Access-Control-Allow-Origin': '*',  // 解决CORS问题
    }
  });
  return newResponse;
}

function checkAuthorization(authHeader, env) {
  // This function checks if the authHeader contains a valid token.
  // For simplicity, here we're just comparing with a predefined value.
  const token = authHeader.split(' ')[1]; // Assumes Bearer token
  return token === env.SUBMIT_AUTH_TOKEN;
}

在环境变量中加入AUTH_TOKEN SUBMIT_AUTH_TOKEN

其中AUTH_TOKEN为硅基流动的apikey,SUBMIT_AUTH_TOKEN为自己定义的令牌,建议使用随机密码生成器来生成。

注意 SUBMIT_AUTH_TOKEN的值需要保存下来,后面会使用

openwebui 设置

代码

由于代码中存在奇奇怪怪的html和md语法,直接贴到论坛上会导致渲染错误,所以可以通过点击这里下载函数代码

在管理员界面 - > 函数-> 添加一个新的函数

点击设置 进行变量的设置

保存后,就可以看到这个新模型了

参考
搞个openwebui的 pipe 玩玩 2 ,硅基流动 ,混元视频生成 - 资源荟萃 / 资源荟萃, Lv1 - LINUX DO

9 个赞

大佬太强了 :tieba_087:

2 个赞

大佬太强了 :tieba_087:

你这小尾巴小心被举报 :tieba_087:

1 个赞

tieba_087

1 个赞

太强了!大佬

太强了,感谢分享

这真不是我的错,硅基视频生成慢 :tieba_087:

其实硅基够快了,
我拿一块满血A100跑 720 x 1280 , infer-steps 50 ,5s 的视频要50分钟 :tieba_087:

1 个赞

确实 硅基这个视频生成的速度就是慢 我这边直接用Artifacts 前端轮询视频 这样就能挂到后台先干别的了 并且不害怕超时 :melting_face:

1 个赞

大佬有技术 :tieba_087:

代码外挂再外挂哈哈 :tieba_025:

1 个赞

我那 openwebui 函数写的 老神奇了

1 个赞

太强了 感谢分享