Kavel

Generate AI images from Elixir with no API key and no account.

def deps do
[{:kavel, "~> 0.1"}]
end
{:ok, img} = Kavel.generate("matte black ceramic mug on pale oak, soft window light",
aspect_ratio: "16:9")
img.url #=> "https://cdn.kavel.ai/uploads/kie/image/....webp"
img.watermarked #=> true on the free tier

Every other image client wants a key from OpenAI, fal or Replicate before it runs once. This one calls the anonymous tier of Kavel, an online AI image and video studio, with a client id it invents instead of an account you register. It needs nothing beyond OTP's :httpc and Jason.

Errors you can match on

case Kavel.generate("a lighthouse at dusk, oil painting") do
{:ok, img} -> img.url
{:error, :quota, _} -> "free allowance spent for today"
{:error, :rejected, _} -> "reword the prompt"
{:error, _reason, message} -> message
end

Reasons: :quota, :rejected, :sign_in, :auth, :timeout, :other.

The free tier

Kavel.credits() reads what a fresh client id is granted, and the call costs nothing. On 2026-10-02 the grant was 5 credits, one generated image spent all five, and one IP got two images that day. Free output is 1K and watermarked, and free runs queue before the model starts, so the default deadline is six minutes.

Editing a photo

Kavel.edit("https://example.com/portrait.jpg",
"shoulder-length layered haircut, keep the same face, skin and lighting",
api_key: System.get_env("KAVEL_API_KEY"))

An edit costs more than the free grant, so it needs a key from kavel.ai/settings/apikeys. Without one it returns {:error, :quota, _} before anything is charged.

License

MIT. Generated with Kavel AI.