Opendream:为所有人开启Web UI的新纪元!
🎨💭
在Opendream中,我们为你的Stable Diffusion工作流程带来了期盼已久的特性,如图层管理、非破坏性编辑、可移植性以及易于编写的扩展。观看我们的演示视频,体验更多创新可能。
开始使用
- 确保已安装Node.js。可以从此处下载。
- 克隆此仓库。
- 在终端中导航到项目文件夹并运行
sh ./run_opendream.sh
。大约30秒后,前端和后端的Opendream系统应正常运行。
强大特性
扩散模型已成为图像生成和操纵领域的强大工具。然而,它们往往被视为黑箱,因为其复杂性。当前的扩散图像生成环境主要由支持一次性图像操纵任务的工具定义,如text2img、in-painting、pix2pix等。
例如,像Automatic1111、Midjourney和Stability.AI的DreamStudio这样的流行界面只支持破坏性编辑:每次编辑都会“消耗”前一图像。这限制了用户建立在先前图像基础上或在同一图像上进行多次实验的能力,从而减少了创造性探索的可能性。
图层化与非破坏性编辑
非破坏性编辑是一种图像处理方法,它在进行调整和修改时保留原始图像数据,而不会覆盖以前的工作。这种方法促进了实验,并通过使用图层和蒙版提供了对编辑过程的更多控制。当你删除一个图层时,所有在其后的图层也会被删除。这确保了画布上的所有图层都是其他现有图层的产品。这也使得可以确定地“重播”工作流程。
就像Photoshop一样,Opendream开箱即用就支持非破坏性编辑。了解更多关于Photoshop中非破坏性编辑原理的信息,可参考此链接。
保存与分享工作流
用户还可以将当前的工作流程保存为可移植的文件格式,以便稍后打开或与合作者共享。在这种情况下,“状态”只是一个JSON文件,描述了所有当前图层及其创建方式。
支持简单易用的扩展
随着这些模型和工具的开源生态系统蓬勃发展,扩展性也成为一个关键问题。虽然Automatic1111确实提供了一些扩展,但它们通常编程困难,使用和安装也不方便。它远没有达到Adobe Photoshop应用程序那样的全面功能。
当新的扩散模型功能,如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 | 文件 | | 服务化稳定扩散 | 文件 | | 指导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许可证授权。
加入Opendream,让我们一起打破创新的界限,探索无限的艺术创作可能!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考