Stable Diffusion的ArtBot
查看实际效果:https://tinybots.net/artbot
目录
简介
ArtBot是一个非官方的前端网页客户端,专为与Stable Horde分布式集群进行交互而设计。Stable Horde是一组运行Stable Diffusion的GPU集群,其处理时间由热心的志愿者社区慷慨捐赠。
ArtBot使用Next.js 13和Typescript构建。它作为一个副项目创建,目的是为了实验各种客户端技术,如IndexedDB和LocalStorage API。这些API允许你在自己的浏览器中安全私密地存储你使用集群创建的AI生成图像。
UI组件是使用Styled Components和Tailwind CSS的组合自定义构建的,最近的工作主要集中在使用Tailwind CSS。长期目标是完全从代码库中移除Styled Components。
ArtBot使用来自Tabler的图标。
设置
要求
- node
>= 18.0.0
- npm
>= 9.0.0
这些步骤大多适用于Linux / MacOS / Windows环境。
在你的机器上安装各种版本的Node.js可能比较棘手。我非常喜欢nvm,它允许你在机器上轻松运行多个隔离的Node.js版本。
使用nvm
,你可以这样安装Node:
> nvm install v18.16.0
> nvm alias default node
安装
一旦你设置好Node.js环境,你就可以克隆这个存储库并安装所需的包。根据你机器的配置和网络连接速度,安装所有包可能需要一到两分钟。
> git clone https://github.com/daveschumaker/artbot-for-stable-diffusion
> cd artbot-for-stable-diffusion
> npm install
环境变量
一个postinstall
脚本会自动运行,在项目根目录创建一个空白的.env
文件。你不需要向其中添加任何内容,但dotenv
包需要它的存在。
虽然不是必需的,但代码库在各个地方引用了一些环境变量。这些通常是我运行的消息传递、遥测服务的端点,或与模型计数和图像生成总数相关的本地数据存储。
使用
开发
**重要提示:**在Windows机器上尝试以这种方式运行应用程序将不起作用。这是由于使用npm
脚本向web应用程序传递环境变量。有关更多信息,请参阅故障排除部分。
好了,你现在应该能够运行ArtBot网页应用了!要在开发模式下运行(使用NextJS的热重载功能 -- 你可以在网站上实时看到你所做的更改):
> npm run dev
然后,打开你的浏览器并访问http://localhost:3000
,你现在应该能够立即向Stable Horde发出图像请求。前往http://localhost:3000/artbot/settings
并输入你的Stable Horde API密钥以获得更快的生成时间。
生产
如果你想在生产类型的环境中运行这个应用,你首先需要启动构建,然后像通常运行Node.JS应用一样运行。
> npm run build
> npm run start
在TinyBots(我用于托管ArtBot的web服务器)上,我使用PM2来持久化应用程序并在崩溃或重启后自动重启。你可以在ecosystem.config.js中修改PM2相关设置。
此外,你可以使用以下命令启动和停止PM2:
> npm run pm2:start-prod
> npm run pm2:stop-prod
故障排除
Windows问题
如前所述,在Windows环境中尝试使用npm run dev
或npm run start
将导致错误。解决这个问题的一种可能方法是删除环境变量。以npm run dev
为例,操作如下:
- 打开
package.json
- 将
scripts/dev
行修改为从脚本中删除PORT=3000
:
> npm run update:build-id && node server.js
- 保存
package.json
并尝试重新运行:> npm run dev
- 现在应该可以正常工作了(web应用将默认使用3000端口,这在server.js中自动设置)
其他问题
对于这里未提到的其他问题,请随时在Github上开一个新的issue或访问Stable Horde Discord服务器上的ArtBot反馈频道。
贡献
非常欢迎贡献!一般指南如下:
- Fork这个存储库
- 切出一个新的功能分支。例如,
> git checkout -b my-cool-new-feature
- 做出必要的更改。
- 基于你的功能分支打开一个新的拉取请求。
如果你有任何问题,请告诉我。我很乐意帮忙。