Goal: Produce stuff similar to https://warp.net/
Uses Ruby instead of Python for increased programmer happiness
promo.rb
require "replicate"
Replicate.configure do |config|
config.api_token = "XXX"
end
model = Replicate.client.retrieve_model("replicate/dreambooth")
version = model.latest_version
artists = [
"joh",
"tg3",
"hak",
"mik",
"ang",
]
# https://huggingface.co/BestJammer/HASDX
# https://civitai.com/models/4201/realistic-vision-v13
ckpts = [
"https://huggingface.co/BestJammer/HASDX/resolve/main/ckptSXDHAS.ckpt",
"https://huggingface.co/SG161222/Realistic_Vision_V1.4/blob/main/Realistic_Vision_V1.4.ckpt",
]
artists.each do |artist|
puts "Starting #{ artist }. Check status at https://replicate.com/predictions..."
upload = Replicate.client.upload_zip("#{ artist }.zip")
ckpts.each do |ckpt|
training = Replicate.client.create_training(
input: {
instance_prompt: "a #{ artist } man",
class_prompt: "a man",
instance_data: upload.serving_url,
num_class_images: 25,
max_train_steps: 5000,
ckpt_base: ckpt
},
model: ("basicfeatures/promos")
)
loop do
training.refetch
break if training.finished?
puts "Waiting for training to finish..."
sleep 1200
end
end
inputs = {
"prompt": "a #{ artist } man, frills, detailed skin, perfect face, fashion photography, photo realistic, ultra realistic, 20 megapixel, 35mm analog camera, (full body intricate, vibrant, photo realistic, ultra realistic, dramatic, sharp focus, 8k), background is #{ ["party", "concert", "festival", "nightclub", "rave party", "beach", "nature", "luxury aparment", "bedroom", "toilet"].sample }",
"negative_prompt": "(deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime:1.4), text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck",
"width": 1024,
"height": 768,
"num_outputs": 4,
"num_inference_steps": 50, # Max 500
"guidance_scale": 7, # Max 20
"scheduler": "DPMSolverMultistep"
}
prediction = version.predict(inputs)
loop do
prediction.refetch
break if prediction.finished?
puts "Generating..."
sleep 30
end
puts prediction.urls["get"]
end