Opendream:为我们量身定做的Web界面 💭 🎨
Opendream为你的Stable Diffusion工作流带来了急需且熟悉的功能,例如分层、非破坏性编辑、便携性和易于编写的扩展。查看我们的演示视频。
快速入门
- 先决条件:确保你已经安装了Node。你可以在这里下载。
- 克隆这个仓库。
- 在终端中导航到该项目并运行
sh ./run_opendream.sh
。大约30秒后,Opendream系统的前端和后端应该启动并运行。
功能
扩散模型已经成为图像生成和处理领域的强大工具。虽然它们提供了显著的优势,但由于其固有的复杂性,这些模型通常被视为黑箱。目前的扩散图像生成生态系统是由允许一次性图像处理任务来控制这些模型的工具定义的——如text2img、in-painting、pix2pix等。
例如,流行的界面如Automatic1111、Midjourney和Stability.AI的DreamStudio只支持破坏性编辑:每次编辑都会“消耗”之前的图像。这意味着用户不能轻易地在之前的图像基础上进行创作,或在同一张图像上进行多次实验,从而限制了他们的创作探索。
分层和非破坏性编辑
非破坏性编辑是一种图像处理方法,它在保留原始图像数据的同时,允许用户进行调整和修改,而不会覆盖之前的工作。这种方法通过使用图层和蒙版促进了实验,并对编辑过程提供了更多的控制。当你删除一个图层时,所有在它之后的图层也会被删除。这确保了画布上当前的所有图层都是其他现有图层的产物。这也允许你确定性地“重放”一个工作流。
像Photoshop一样,Opendream原生支持非破坏性编辑。了解更多关于Photoshop中非破坏性编辑原理的信息这里。
保存和共享工作流
用户还可以将他们当前的工作流保存到一种便携的文件格式,该文件可以在以后打开或与合作者共享。在这种情况下,“状态”只是一个描述所有当前图层以及它们如何创建的JSON文件。
支持简单编写、易于安装的扩展
随着开源生态系统围绕这些模型和工具的发展,扩展性也成为一个主要关注点。虽然Automatic1111确实提供了扩展,但它们往往难以编程、使用和安装。它远未像Adobe Photoshop这样的应用程序一样功能齐全。
随着Stable Diffusion的新功能(如ControlNet)的发布,用户应该能够无缝地将它们集成到他们的艺术工作流中,且负担和时间最少。
Opendream使编写和使用新的扩散功能变得像编写Python函数一样简单。请继续阅读,了解更多信息。
扩展
从一开始,Opendream就支持两个核心系统中内置的关键原始操作:dream
和mask_and_inpaint
。该仓库提供了instruct_pix2pix
、controlnet_canny
、controlnet_openpose
和sam
(Segment Anything)的扩展。
任何图像处理逻辑都可以轻松编写为扩展。通过扩展,你还可以决定某些操作的工作方式。例如,你可以重写dream
操作以使用OpenAI的DALL-E,或调用像AWS或Replicate这样的服务上的无服务器端点。这是一个使用Baseten的示例。
加载现有扩展
有两种加载扩展的方法。
- 通过Web UI安装预编写的扩展。
- _(手动)_下载一个有效的扩展文件(或者自己编写一个!)并将其添加到
opendream/extensions
文件夹中。编写你自己的扩展的说明在下方。
以下是目前支持的扩展示例。你可以使用链接通过Web UI安装任何给定的扩展。
扩展 | 链接 |
---|---|
OpenAI的DALL-E | 文件 |
无服务器Stable Diffusion | 文件 |
Instruct Pix2Pix | 文件 |
ControlNet Canny | 文件 |
ControlNet Openpose | 文件 |
Segment Anything | 文件 |
PhotoshopGPT | Gist |
请注意,扩展可能有其自身的需求,你需要将其包含在requirements.txt
文件中。例如,如果你想使用DALL-E扩展,你需要添加openai
。
如果你创建了一个有用的扩展,请随时提交PR!
编写你自己的扩展
用户可以按如下方式编写自己的扩展:
- 在
opendream/extensions
文件夹中创建一个新的Python文件。 - 编写一个带有类型提示和
@opendream.define_op
装饰器的方法。该装饰器会将此方法注册到Opendream后端。
该方法有一些要求:
- 参数必须有类型提示。这些提示使后端能够生成输入的模式,这些模式被解析为前端的表单组件。有效类型包括:
str
、int
、float
、Layer
、MaskLayer
或ImageLayer
。 - 唯一有效的返回类型是
Layer
或Layer
对象的列表。
贡献和许可
Opendream由Varun Shenoy、Eric Lou、Shashank Rammoorthy和Rahul Shiv作为斯坦福大学CS 348K的一部分创建。
欢迎提供你认为必要或有用的任何贡献。这个项目是根据MIT许可的。