ImaginAIry 🤖🧠
AI 想象的图像。Python 实现的稳定扩散图像 和视频 生成!
在 Linux 和 macOS(M1) 上 "开箱即用" (有时也支持 Windows)。
# 在 macOS 上,确保首先安装 rust
# 确保使用 Python 3.10,目前不支持 Python 3.11
>> pip install imaginairy
>> imagine "a scenic landscape" "a photo of a dog" "photo of a fruit bowl" "portrait photo of a freckled woman" "a bluejay"
# 制作 AI 视频
>> aimg videogen --start-image rocket.png
稳定视频扩散
稳定扩散视频的快速发布!
支持 Nvidia GPU。不支持 Mac 或 CPU。
在 Windows 上,你需要首先通过 https://pytorch.org/get-started/locally/ 安装 torch 2.0。
用法: aimg videogen [OPTIONS]
AI 从图像生成视频
示例:
aimg videogen --start-image assets/rocket-wide.png
选项:
--start-image TEXT 输入图像文件的路径。
--num-frames INTEGER 帧数。
--num-steps INTEGER 步数。
--model TEXT 要使用的模型。包括:svd, svd_xt, svd_image_decoder, svd_xt_image_decoder
--fps INTEGER 生成视频时 AI 目标的帧率
--output-fps INTEGER 输出视频的帧率
--motion-amount INTEGER 生成运动的量值。值在 0 到 255 之间。
-r, --repeats INTEGER 渲染重复次数。 [默认: 1]
--cond-aug FLOAT 条件增强。
--seed INTEGER 随机数生成器的种子。
--decoding_t INTEGER 一次解码的帧数。
--output_folder TEXT 输出文件夹。
--help 显示此信息并退出。
图像
更新内容
14.3.0
- 功能:集成了 spandrel 用于图像放大
- 修复:允许从本地路径加载 sdxl 模型。
14.2.0
- 🎉 功能:通过
--image-prompt
和--image-prompt-strength
添加了图像提示支持
14.1.1
- 测试:为 Windows、Mac 和 conda 添加了安装测试
- 修复:依赖项问题
14.1.0
- 🎉 功能:通过添加帧插值使视频生成更加平滑
- 功能:现在可以使用 compvis 格式的 SDXL 权重
- 功能:允许用户指定任意大小的视频生成
- 功能:视频生成输出为 "弹跳" 格式
- 功能:选择视频输出格式:mp4、webp 或 gif
- 功能:修复了视频生成中的随机种子处理
- 文档:在推送到 master 分支时自动发布文档
- 构建:移除 imageio 依赖项
- 构建:内部化 facexlib,以避免安装不必要的依赖项
14.0.4
- 文档:添加了一个文档网站 https://brycedrennan.github.io/imaginAIry/
- 构建:移除 fairscale 依赖项
- 修复:修复了视频生成的错误
14.0.3
- 修复:修复了多个关键的包错误
- 测试:添加了一个轮式烟雾测试以检测未来的这些问题
14.0.0
- 🎉 使用 稳定视频扩散 生成视频
- 在任何图像生成中添加
--videogen
来从生成的图像创建一个短视频 - 或者使用
aimg videogen
从图像生成视频
- 在任何图像生成中添加
- 🎉 现在支持 SDXL(稳定扩散超大)模型。
- 试试
--model opendalle
或--model sdxl
- SDXL 目前不支持修复和控制网
- 试试
- 🎉 imaginairy 现在由 refiners 库 提供支持
- 这是一次巨大的重写,因此一些功能尚未得到支持。好的一面是,refiners 支持前沿功能(SDXL、图像提示等),这些功能将很快添加到 imaginairy 中。
- 自我注意引导 使图像的细节更加准确
- 🎉 功能:更大尺寸的图像生成效果大大提高,并且在不同尺寸下保持图像的相同外 <SOURCE_TEXT>
深度图控制
imagine --control-image fancy-living.jpg --control-mode depth "a modern living room"
法线图控制
imagine --control-image bird.jpg --control-mode normal "a bird"
图像混合控制
基于控制图像的元素生成图像。类似于风格迁移。
imagine --control-image pearl-girl.jpg --control-mode shuffle "a clown"
中间的图像是“混合”后的输入图像
编辑指令控制
类似于 instructPix2Pix(如下),但适用于任何基于 SD 1.5 的模型。
imagine --control-image pearl-girl.jpg --control-mode edit --init-image-strength 0.01 --steps 30 --negative-prompt "" --model openjourney-v2 "make it anime" "make it at the beach"
添加细节控制(放大/超分辨率)
替换图像中的现有细节。建议与 --init-image-strength 0.2 一起使用。
imagine --control-image "assets/wishbone.jpg" --control-mode details "sharp focus, high-resolution" --init-image-strength 0.2 --steps 30 -w 2048 -h 2048
图像(重新)上色(使用亮度控制)
为黑白图像上色或重新上色现有图像。
生成的颜色将应用回原始图像。您可以提供标题,也可以 让工具为您生成标题。
aimg colorize pearl-girl.jpg --caption "photo of a woman"
基于指令的图像编辑 by InstructPix2Pix
(14.0.0版本后不可用)
只需告诉 imaginairy 如何编辑图像,它将为您完成!
点击查看 shell 命令
使用提示强度控制编辑的强度。为了更好地控制,您可以结合基于提示的掩膜。# 进入 imaginairy shell
>> aimg
🤖🧠> edit scenic_landscape.jpg -p "make it winter" --prompt-strength 20
🤖🧠> edit dog.jpg -p "make the dog red" --prompt-strength 5
🤖
### 基于提示的遮罩 [由 clipseg 提供](https://github.com/timojl/clipseg)
使用布尔逻辑和强度修饰符指定高级文本遮罩。
遮罩语法:
- 遮罩描述必须为小写
- 关键词 (`AND`, `OR`, `NOT`) 必须为大写
- 支持括号
- 遮罩修饰符可以附加到任何遮罩或遮罩组。例如: `(dog OR cat){+5}` 表示我们将选择任意狗或猫,然后将遮罩区域扩展5像素。有效的遮罩修饰符有:
- `{+n}` - 扩展遮罩n像素
- `{-n}` - 缩小遮罩n像素
- `{*n}` - 乘以遮罩强度。将遮罩扩展到与遮罩描述弱匹配的区域
- `{/n}` - 除以遮罩强度。将遮罩减少到与遮罩描述最强匹配的区域。可能无用
在编写强度修饰符时,请记住像素值介于0到1之间。
```bash
>> imagine \
--init-image pearl_earring.jpg \
--mask-prompt "face AND NOT (bandana OR hair OR blue fabric){*6}" \
--mask-mode keep \
--init-image-strength .2 \
--fix-faces \
"a modern female president" "a female robot" "a female doctor" "a female firefighter"
➡️
>> imagine \
--init-image fruit-bowl.jpg \
--mask-prompt "fruit OR fruit stem{*6}" \
--mask-mode replace \
--mask-modify-original \
--init-image-strength .1 \
"a bowl of kittens" "a bowl of gold coins" "a bowl of popcorn" "a bowl of spaghetti"
➡️
人脸增强 由 CodeFormer 提供
>> imagine "a couple smiling" --steps 40 --seed 1 --fix-faces
➡️
图像放大
轻松放大图像。
=== "CLI"
bash aimg upscale assets/000206_856637805_PLMS40_PS7.5_colorful_smoke.jpg --upscale-model real-hat
=== "Python" ```py from imaginairy.api.upscale import upscale
img = upscale(img="assets/000206_856637805_PLMS40_PS7.5_colorful_smoke.jpg")
img.save("colorful_smoke.upscaled.jpg")
```
➡️
放大使用 Spandrel 使得使用不同的放大模型变得容易。
你可以通过运行 aimg upscale --list-models
查看不同的集成模型,然后通过 --upscale-model <model-name>
使用它。
如果你想用不同的模型放大图像,也可以接受url。使用 --format 控制新文件格式/位置。
from imaginairy.enhancers.upscale_realesrgan import upscale_image
from PIL import Image
img = Image.open("my-image.jpg")
big_img = upscale_image(i)
平铺图像
>> imagine "gold coins" "a lush forest" "piles of old books" leaves --tile
360度图
<SOURCE_TEXT>
imagine "valley, fairytale treehouse village covered, , matte painting, highly detailed, dynamic lighting, cinematic, realism, realistic, photo real, sunset, detailed, high contrast, denoised, centered, michael whelan" --steps 60 --seed 1 --arg-schedule model[sd14,sd15,sd20,sd21,openjourney-v1,openjourney-v2] --arg-schedule "caption-text[sd14,sd15,sd20,sd21,openjourney-v1,openjourney-v2]"
Prompt Expansion
你可以使用 {}
从列表中随机抽取值。用 |
分隔并用 { }
括起来的值将在不重复的情况下随机抽取。被 __
包围的值将从同名短语列表中抽取。包含 .txt
短语列表文件的文件夹可以通过 --prompt_library_path
指定。该选项可以多次指定。内置分类:
3d-term, adj-architecture, adj-beauty, adj-detailed, adj-emotion, adj-general, adj-horror, animal, art-scene, art-movement, art-site, artist, artist-botanical, artist-surreal, aspect-ratio, bird, body-of-water, body-pose, camera-brand, camera-model, color, cosmic-galaxy, cosmic-nebula, cosmic-star, cosmic-term, desktop-background, dinosaur, eyecolor, f-stop, fantasy-creature, fantasy-setting, fish, flower, focal-length, food, fruit, games, gen-modifier, hair, hd, iso-stop, landscape-type, national-park, nationality, neg-weight, noun-beauty, noun-fantasy, noun-general, noun-horror, occupation, painting-style, photo-term, pop-culture, pop-location, punk-style, quantity, rpg-item, scenario-desc, skin-color, spaceship, style, tree-species, trippy, world-heritage-site
示例:
imagine "a {lime|blue|silver|aqua} colored dog" -r 4 --seed 0
(注意它生成了每种颜色的狗且没有重复)
imagine "a {_color_} dog" -r 4 --seed 0
将生成四只不同颜色的狗。颜色将从一个包含颜色的短语列表中抽取。
imagine "a {_spaceship_|_fruit_|hot air balloon}. low-poly" -r 4 --seed 0
将生成飞船、水果或热气球的图像
Python示例
from imaginairy.enhancers.prompt_expansion import expand_prompts
my_prompt = "a giant {_animal_}"
expanded_prompts = expand_prompts(n=10, prompt_text=my_prompt, prompt_library_paths=["./prompts"])
感谢 noodle-soup-prompts 提供的大部分(但不是全部)词表。
生成图像描述(通过 BLIP)
>> aimg describe assets/mask_examples/bowl001.jpg
a bowl full of gold bars sitting on a table
示例用例
>> aimg
# 生成无尽的8k艺术
🤖🧠> imagine -w 1920 -h 1080 --upscale "{_art-scene_}. {_painting-style_} by {_artist_}" -r 1000 --steps 30 --model sd21v
# 生成无尽的桌面背景
🤖🧠> imagine --tile "{_desktop-background_}" -r 100
# 将一文件夹中的图像转换为铅笔素描
🤖🧠> edit other/images/*.jpg -p "make it a pencil sketch"
# 放大一文件夹中的图像
🤖🧠> upscale my-images/*.jpg
# 生成厨房翻新方案
🤖🧠> imagine --control-image kitchen.jpg -w 1024 -h 1024 "{_interior-style_} kitchen" --control-mode depth -r 100 --init-image 0.01 --upscale --steps 35 --caption-text "{prompt}"
额外功能
- 无论是在代码中还是命令行中,都可以生成图像。
- 只要硬件允许,它就可以运行。安装正确的依赖项。模型权重将自动下载。不需要Huggingface账户。 (如果你有正确的硬件...而且不是在Windows上)
- 噪音日志已被移除(这其实相当难以实现)
- WeightedPrompts 允许你组合不同的提示词(如cat-dog)
- 提示词元数据保存到图像文件元数据中
- 让AI生成图像描述
aimg describe <filename-or-url>
- 交互式提示:只需运行
aimg
如何运行
要获取完整的命令行说明,请运行 aimg --help
from imaginairy import imagine, imagine_image_files, ImaginePrompt, WeightedPrompt, LazyLoadingImage
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/Thomas_Cole_-_Architect%E2%80%99s_Dream_-_Google_Art_Project.jpg/540px-Thomas_Cole_-_Architect%E2%80%99s_Dream_-_Google_Art_Project.jpg"
prompts = [
ImaginePrompt("a scenic landscape", seed=1, upscale=True),
ImaginePrompt("a bowl of fruit"),
ImaginePrompt([
WeightedPrompt("cat", weight=1),
WeightedPrompt("dog", weight=1),
]),
ImaginePrompt(
"a spacious building",
init_image=LazyLoadingImage(url=url)
),
ImaginePrompt(
"a bowl of strawberries",
init_image=LazyLoadingImage(filepath="mypath/to/bowl_of_fruit.jpg"),
mask_prompt="fruit OR stem{*2}", # 放大茎的蒙版x2
mask_mode="replace",
mask_modify_original=True,
),
ImaginePrompt("strawberries", tile_mode=True),
]
for result in imagine(prompts):
# 做点什么
result.save("my_image.jpg")
# 或者
imagine_image_files(prompts, outdir="./my-art")
系统要求
- ~10 gb 空间用于下载模型
- 支持 CUDA 的显卡,显存>= 11gb(并安装 CUDA)或 M1 处理器。
- 安装了 Python。最好是 Python 3.10。(非 conda)
- 对于 macOS,必须安装 rust 和 setuptools-rust 来编译
tokenizer
库。 它们可以通过以下方式安装:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
和pip install setuptools-rust
在 Docker 中运行
查看示例 Dockerfile(适用于可以将 GPU 传递给容器的机器)
docker build . -t imaginairy
# 你真的希望映射缓存,否则你会浪费大量时间和空间重新下载模型权重
docker run -it --gpus all -v $HOME/.cache/huggingface:/root/.cache/huggingface -v $HOME/.cache/torch:/root/.cache/torch -v `pwd`/outputs:/outputs imaginairy /bin/bash
在 Google Colab 上运行
问答
问:如何更改存储模型的缓存目录?
答:设置 HUGGINGFACE_HUB_CACHE
环境变量。
问:如何释放磁盘空间?
答:AI 模型缓存位于 ~/.cache/
(或 HUGGINGFACE_HUB_CACHE
)。要删除缓存,请移除以下文件夹:
- ~/.cache/imaginairy
- ~/.cache/clip
- ~/.cache/torch
- ~/.cache/huggingface
不支持
- 不适用于探索性功能 </SOURCE_TEXT>