veida
Generate images from Elixir with no API key, no account and no card.
{:ok, img} = Veida.generate("a paper boat on a calm lake at sunrise, soft light", aspect_ratio: "16:9")
img.url #=> "https://cdn.veida.ai/uploads/....webp"
img.watermarked #=> true on the free tier
Install:
# mix.exs
{:veida, "~> 0.1"}
Most image libraries want a key from OpenAI, fal or Replicate before they run once. This one talks to the anonymous tier of Veida, an online AI image generator, using a client id the library invents rather than an account you register, so it works on a fresh machine with nothing configured.
What the free tier covers
Measured against the running service:
| Anonymous grant per client id | 4 credits |
| One text-to-image run | 4 credits, so one image per id |
| Per-IP ceiling | 30 credits a day, roughly 7 images |
| Output | 1K, watermarked |
The library mints a fresh client id for every call, so a loop is not limited to one image;
the per-IP ceiling is what stops it. When that is spent you get {:error, :quota, message} saying so.
Editing an existing photo is not offered here. The editing model costs 30 credits against a 4-credit grant, so an anonymous edit could never be paid for. Signed in, the image editor does that in a browser.
Past the free tier
Signing in removes the watermark, lifts the cap and opens the larger models: GPT Image 2 when the picture must contain readable text, Nano Banana 2 for instruction following and Seedream 5.0 Lite for colour and composition. What each costs is on the pricing page.
Prompts that work
Name the light, the material and the composition. "A product photo of a mug" gives the model nothing; "matte black ceramic mug on pale oak, soft window light from the left, shallow depth of field" gives it a picture. Worked examples live in the prompt library. The same engine backs the ChatGPT image generator and the free AI image generator in a browser.
API
Veida.generate(prompt, aspect_ratio: "1:1", poll_ms: 4_000, timeout_ms: 240_000)
# {:ok, %{url: url, watermarked: bool}}
# {:error, :quota | :rejected | :timeout | :other, message}
Aspect ratio is one of 1:1, 16:9, 9:16, 4:3, 3:4.
Uses OTP's :httpc and Jason; no HTTP client dependency to pin.
Other clients: Python · Go · MCP server.
MIT.