Skip to content

Instantly share code, notes, and snippets.

@htoyryla
Last active September 8, 2022 15:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save htoyryla/77b6376fe04ef3a66ff6a9b1cb206a09 to your computer and use it in GitHub Desktop.
Save htoyryla/77b6376fe04ef3a66ff6a9b1cb206a09 to your computer and use it in GitHub Desktop.
Script for image2image using stablediffusion using incremental strength
from torch import autocast
import torch
import requests
from PIL import Image
import sys
from diffusers import StableDiffusionImg2ImgPipeline #, preprocess
import random
import argparse
# image to image generation using StableDiffusion 0.3.0 dev
# by default generates 29 images varying strength 0 to 1
# set --start and --step to vary the starting strength etc
# Point model to your stablediffusion pretrained folder
# or a save from textual inversion if needed
parser = argparse.ArgumentParser()
# define params and their types with defaults if needed
parser.add_argument('--model', type=str, default="/work/dtest/stable-diffusion-v1-4", help='path to model')
parser.add_argument('--text', type=str, default="", help='text prompt')
parser.add_argument('--image', type=str, default="", help='path to init image')
parser.add_argument('--output', type=str, default="", help='path to output')
parser.add_argument('--h', type=int, default=512, help='image height')
parser.add_argument('--w', type=int, default=512, help='image width')
parser.add_argument('--start', type=int, default=0, help='start aka skip')
parser.add_argument('--step', type=int, default=5, help='step to increase start point per iteration')
parser.add_argument('--g', type=float, default=7.5, help='guidance scale')
parser.add_argument('--seed', type=int, default=0, help='manual seed')
opt = parser.parse_args()
# load the pipeline
device = "cuda"
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(
#"CompVis/stable-diffusion-v1-4",
#"file:///work/dtest/stable-diffusion-v1-4",
"textual_inversion_st-pes6",
revision="fp16",
torch_dtype=torch.float16,
use_auth_token=True
).to(device)
pipe.enable_attention_slicing()
fn = opt.image
ofn = opt.output
start = opt.start
if opt.seed > 0:
seed = opt.seed
else:
seed = random.randint(0,63444)
g = opt.g
steps = 100
print(start, seed)
init_image = Image.open(fn).convert("RGB")
init_image = init_image.resize((opt.h, opt.w))
#init_image = preprocess(init_image)
prompt = opt.text
step = opt.step
for n in range(start,steps, step):
beta = n/steps
with autocast("cuda"):
generator = torch.Generator("cuda").manual_seed(seed)
images = pipe(prompt=prompt, init_image=init_image, strength=beta, guidance_scale=g, generator=generator)["sample"]
images[0].save(ofn+"-"+str(n)+".png")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment