Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Stable Diffusion with Pythonx

stable_diffusion_with_pythonx.livemd

Stable Diffusion with Pythonx

Mix.install([
  {:pythonx, "~> 0.4.2"},
  {:kino_pythonx, "~> 0.1.0"},
  {:evision, "~> 0.2.13"}
])
[project]
name = "project"
version = "0.0.0"
requires-python = "==3.13.*"
dependencies = [
  "diffusers[torch]",
  "transformers"
]

Section

import torch

torch.cuda.is_available()
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
  "stable-diffusion-v1-5/stable-diffusion-v1-5",
  torch_dtype=torch.float16)
pipeline.to("cuda")

images = pipeline("Jumping dog", num_inference_steps=100).images
images[0]
prompt_input = Kino.Input.text("prompt")
prompt = Kino.Input.read(prompt_input)
images = pipeline(prompt.decode(), num_inference_steps=100, num_images_per_prompt=4).images
images[0]
import io

binary_images = []

for image in images:
  binary_image = io.BytesIO()
  image.save(binary_image, format='PNG')
  binary_images.append(binary_image.getvalue())
binary_images
|> Pythonx.decode()
|> Enum.map(fn binary_image ->
  Evision.imdecode(binary_image, Evision.Constant.cv_IMREAD_COLOR())
end)
|> Kino.Layout.grid(columns: 2)