Skip to content

Instantly share code, notes, and snippets.

@basicfeatures
Last active March 20, 2023 22:54
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 basicfeatures/eaf7b414945c8cdc5f18441f51e1f731 to your computer and use it in GitHub Desktop.
Save basicfeatures/eaf7b414945c8cdc5f18441f51e1f731 to your computer and use it in GitHub Desktop.

Replicate/Dreambooth music artist promos

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment