Image.Generation (image v0.62.0)
View SourceImplements image generation functions using Axon machine learning models managed by Bumblebee.
Configuration
The machine learning model to be used is configurable however only Stable Diffusion is currently supported.
The default configuration is:
# runtime.exs
config :image, :generator,
repository_id: "CompVis/stable-diffusion-v1-4",
scheduler: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "scheduler"},
featurizer: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "feature_extractor"},
safety_checker: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "safety_checker"},
autostart: falseAutostart
If autostart: true is configured (the default is false) then
a process is started under a supervisor to execute the generation
requests. If running the process under an application
supervision tree is desired, set autostart: false. In that
case the function Image.Generation.generator/2 can be
used to return a Supervisor.child_spec/0.
Adding a image generation server to an application supervision tree
To add image generation to an application supervision tree,
use Image.Generation.generator/2 to return a child spec:
For example:
# Application.ex
def start(_type, _args) do
children = [
# default classifier configuration
Image.Generation.generator()
]
Supervisor.start_link(
children,
strategy: :one_for_one
)
endStarting a supervised image generation process
If a dynamically started image generation process is required one can be started under a supervisor with:
iex> Supervisor.start_link([Image.Generation.generator()], strategy: :one_for_one)
Summary
Functions
Returns a child spec for service that generates images from text using Stable Diffusion implemented in Bumblebee.
Generates an image from a textual description using Bumblebee's suport of the Stable Diffusion model.
Functions
Returns a child spec for service that generates images from text using Stable Diffusion implemented in Bumblebee.
Arguments
generatoris a keyword list of configuration options for an image generator or:default.optionsis a keyword list of options.
Options
:num_stepsdetermines the number of steps to execute in the generation model. The default is20. Changing this to40may increase image quality.:num_images_per_promptdetermines how many image alternatives are returned. The default is1.:nameis the name given to the child process. THe default isImage.Generation.Server.
Default configuration
If generator is set to :default the following configuration
is used:
[
repository_id: "CompVis/stable-diffusion-v1-4",
scheduler: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "scheduler"},
featurizer: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "feature_extractor"},
safety_checker: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "safety_checker"},
autostart: false
]If no generator is specified (or it is set to :default
then the configuration is derived from runtime.exs which
is then merged into the default configuration. In
runtime.exs the configuration would be specified as follows:
config :image, :generator,
repository_id: "CompVis/stable-diffusion-v1-4",
scheduler: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "scheduler"},
featurizer: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "feature_extractor"},
safety_checker: {:hf, "CompVis/stable-diffusion-v1-4", subdir: "safety_checker"},
autostart: falseAutomatically starting the service
The :autostart configuration option determines if the
image generation service is started when the :image application
is started. The default is false. To cause the service to
be started at application start, add the following to your
runtime.exs:
config :image, :generator,
autostart: true
@spec text_to_image(prompt :: String.t(), options :: Keyword.t()) :: [ Vix.Vips.Image.t() ]
Generates an image from a textual description using Bumblebee's suport of the Stable Diffusion model.
Arguments
promptis aString.t/0description of the scene to be generated.optionsis a keyword list of options. The default isnegative_prompt: "".
Options
:negative_promptis aString.t/0that tells Stable Diffusion what you don't want to see in the generated images. When specified, it guides the generation process not to include things in the image according to a given text.
Example
iex> Image.Generation.text_to_image "impressionist purple numbat in the style of monet"
[%Vix.Vips.Image{ref: #Reference<0.1281915998.296878104.76045>}]