Pythonic 生成图像。根据一张图片生成类似图片,基于 ControlNet https://github.com/brycedrennan/imaginAIry
|
|
2 years ago | |
|---|---|---|
| README.md | 2 years ago |
Pythonic 生成图像。根据一张图片生成类似图片
"just works" on Linux and macOS(M1) (and maybe windows?).
# on macOS, make sure rust is installed first
>> 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"
# Make an animation showing the generation process
>> imagine --gif "a flower"
Generate images guided by body poses, depth maps, canny edges, hed boundaries, or normal maps.
Openpose Control
imagine --control-image assets/indiana.jpg --control-mode openpose --caption-text openpose "photo of a polar bear"
imagine --control-image assets/lena.png --control-mode canny "photo of a woman with a hat looking at the camera"
imagine --control-image dog.jpg --control-mode hed "photo of a dalmation"
imagine --control-image fancy-living.jpg --control-mode depth "a modern living room"
imagine --control-image bird.jpg --control-mode normal "a bird"
Generates the image based on elements of the control image. Kind of similar to style transfer.
imagine --control-image pearl-girl.jpg --control-mode shuffle "a clown"
The middle image is the "shuffled" input image
<img src="assets/girl_with_a_pearl_earring.jpg" height="256">
<img src="assets/pearl_shuffle_019331_1_kdpmpp2m15_PS7.5_img2img-0.0_a_clown.jpg" height="256">
<img src="assets/pearl_shuffle_clown_019331_1_kdpmpp2m15_PS7.5_img2img-0.0_a_clown.jpg" height="256">
Similar to instructPix2Pix (below) but works with any SD 1.5 based model.
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"
Replaces existing details in an image. Good to use with --init-image-strength 0.2
imagine --control-image "assets/wishbone.jpg" --control-mode tile "sharp focus, high-resolution" --init-image-strength 0.2 --steps 30 -w 2048 -h 2048
Just tell imaginairy how to edit the image and it will do it for you!
Want just quickly have some fun? Try edit-demo to apply some pre-defined edits.
>> aimg edit-demo pearl_girl.jpg
Specify advanced text based masks using boolean logic and strength modifiers. Mask syntax:
AND, OR, NOT) must be uppercase(dog OR cat){+5} means that we'll
select any dog or cat and then expand the size of the mask area by 5 pixels. Valid mask modifiers:
{+n} - expand mask by n pixels{-n} - shrink mask by n pixels{*n} - multiply mask strength. will expand mask to areas that weakly matched the mask description{/n} - divide mask strength. will reduce mask to areas that most strongly matched the mask description. probably not usefulWhen writing strength modifiers keep in mind that pixel values are between 0 and 1.
>> 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"
>> imagine "a couple smiling" --steps 40 --seed 1 --fix-faces
>> imagine "colorful smoke" --steps 40 --upscale
# upscale an existing image
>> aimg upscale my-image.jpg
➡️
### Tiled Images
```bash
>> imagine "gold coins" "a lush forest" "piles of old books" leaves --tile
```








#### 360 degree images
```bash
imagine --tile-x -w 1024 -h 512 "360 degree equirectangular panorama photograph of the desert" --upscale
```
### Image-to-Image
Use depth maps for amazing "translations" of existing images.
```bash
>> imagine --model SD-2.0-depth --init-image girl_with_a_pearl_earring_large.jpg --init-image-strength 0.05 "professional headshot photo of a woman with a pearl earring" -r 4 -w 1024 -h 1024 --steps 50
```
### Outpainting
Given a starting image, one can generate it's "surroundings".
Example:
`imagine --init-image pearl-earring.jpg --init-image-strength 0 --outpaint all250,up0,down600 "woman standing"`
➡️
### Work with different generation models
You can use {} to randomly pull values from lists. A list of values separated by |
and enclosed in { } will be randomly drawn from in a non-repeating fashion. Values that are surrounded by _ _ will
pull from a phrase list of the same name. Folders containing .txt phraselist files may be specified via
--prompt_library_path. The option may be specified multiple times. Built-in categories:
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
Examples:
imagine "a {lime|blue|silver|aqua} colored dog" -r 4 --seed 0 (note that it generates a dog of each color without repetition)
imagine "a {_color_} dog" -r 4 --seed 0 will generate four, different colored dogs. The colors will be pulled from an included
phraselist of colors.
imagine "a {_spaceship_|_fruit_|hot air balloon}. low-poly" -r 4 --seed 0 will generate images of spaceships or fruits or a hot air balloon
Credit to noodle-soup-prompts where most, but not all, of the wordlists originate.
>> aimg describe assets/mask_examples/bowl001.jpg
a bowl full of gold bars sitting on a table
>> aimg
# Generate endless 8k art
🤖🧠> imagine -w 1920 -h 1080 --upscale "{_art-scene_}. {_painting-style_} by {_artist_}" -r 1000 --steps 30 --model sd21v
# generate endless desktop backgrounds
🤖🧠> imagine --tile "{_desktop-background_}" -r 100
# convert a folder of images to pencil sketches
🤖🧠> edit other/images/*.jpg -p "make it a pencil sketch"
# upscale a folder of images
🤖🧠> upscale my-images/*.jpg
# generate kitchen remodel ideas
🤖🧠> 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}"
aimg describe <filename-or-url>aimgFor full command line instructions run 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}", # amplify the stem mask x2
mask_mode="replace",
mask_modify_original=True,
),
ImaginePrompt("strawberries", tile_mode=True),
]
for result in imagine(prompts):
# do something
result.save("my_image.jpg")
# or
imagine_image_files(prompts, outdir="./my-art")
tokenizer library.
They can be installed via: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh and pip install setuptools-rust
See example Dockerfile (works on machine where you can pass the gpu into the container)
docker build . -t imaginairy
# you really want to map the cache or you end up wasting a lot of time and space redownloading the model weights
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
A: Set the HUGGINGFACE_HUB_CACHE environment variable.
A: The AI models are cached in ~/.cache/ (or HUGGINGFACE_HUB_CACHE). To delete the cache remove the following folders:
12.0.2
12.0.1
12.0.0
11.1.1
11.1.0
11.0.0
10.2.0
--control-image-raw
This is opposed to current behavior of extracting the control signal from an input image via --control-imageaimg model-list command lists included modelsaimg system-info command--fix-faces options to aimg upscale commandaimg cli code into multiple files10.1.0
aimg colorize attempts to use controlnet to colorize images--caption-text command adds text at the bottom left of an image10.0.1
edit was broken10.0.0
imagine "a flower" -w 1920 -h 1080xformers added as a dependency for linux and windows. Gives a nice speed boost.9.0.2
9.0.1
9.0.0
aimg --help runs in ~650ms instead of ~3400msedit and imagine commands now accept multiple images (which they will process separately). This allows
batch editing of images as requested in #229--surprise-me to its own subcommand edit-demo--output-file-extension8.3.1
8.3.0
gifs or mp4s from any images made in a single run with --compilation-anim gif--arg-schedule argumentopenjourney-v1 and openjourney-v2 models added. available via --model openjourney-v2aimg upscale--gif option will create a gif showing the generation process for a single image--compare-gif option will create a comparison gif for any image edits8.2.0
aimg system-info command to help debug issues8.1.0
aimg shell logs8.0.5
8.0.4
8.0.3
8.0.2
8.0.1
8.0.0
--gif to create a comparision gifaimg edit --surprise-me --gif my-image.jpg for some fun pre-programmed edits7.6.0
--version--outpaint up10,down300,left50,right50 or --outpaint all100 or --outpaint u100,d200,l300,r4007.4.3
7.4.2
7.4.1
7.4.0
7.3.0
7.2.0
imagine --tile-x -w 1024 -h 512 "360 degree equirectangular panorama photograph of the mountains" --upscale7.1.1
7.1.0
--model SD-2.1 or --model SD-2.0-v7.0.0
--negative-prompt or ImaginePrompt(..., negative_prompt="ugly, deformed, extra arms, etc")6.1.2
6.1.1
6.1.0
--model SD-2.0 to use (it makes worse images than 1.5 though...)--model SD-2.0-v)5.1.0
5.0.1
5.0.0
DPM++ 2S a and DPM++ 2M samplers.--show-work. fixes #84DPM++ 2S a and DPM++ 2M samplers.k_dpm_fast sampler. fixes #754.1.0
--model SD-1.5 or --model SD-1.4 or --model path/my-custom-weights.ckpt)4.0.0
+ and - characters in a mask (example: face{+0.1}) added to the grayscale value of any masked areas. This wasn't very useful. The new behavior is that the mask will expand or contract by the number of pixel specified. The technical terms for this are dilation and erosion. This allows much greater control over the masked area.3.0.1
3.0.0
2.4.0
2.3.1
2.3.0
--model-weights-path argument at the command line2.2.1
2.2.0
2.1.0
2.0.3
2.0.0
aimgAND, OR, NOT, (), and mask strength modifier {+0.1} where + can be any of + - * /. Single character boolean operators also work (|, &, !)mask_modify_original (on by default)1.6.2
1.6.1
1.6.0
expected scalar type BFloat16 but found Float
--precision full now and that will probably fix the issue1.5.3
1.5.1
aimg describe dog.jpg => a brown dog sitting on grassaimg for additional image manipulation functionality1.4.0
| symbol. Example: "fruit|stem|fruit stem"1.3.0
1.2.0
previous