Skip to content

Python SDK

pip install studiolm

Authentication

import studiolm

client = studiolm.Client(api_key="sk-...")

# Or set STUDIOLM_API_KEY in your environment and omit the argument
client = studiolm.Client()

Image generation

image = client.generate(
    "A serene mountain lake at dawn, cinematic lighting",
    style="vivid",
    size="1024x1024",
)
image.save("output.png")

Choose a model

image = client.generate(
    "A fantasy castle at sunset",
    model="RealisticV1",   # display name from client.models.list()
)

Sizes

size= Aspect ratio
"512x512", "768x768", "1024x1024" Square (default)
"832x1216", "512x768" Portrait
"1216x832", "768x512" Landscape

Add a custom size mapping:

studiolm.SIZE_PRESETS["960x540"] = "landscape"

Styles

vivid · natural · preview · upscaled

Image-to-image

image = client.generate(
    "Transform into anime style",
    reference_image_url="https://example.com/photo.jpg",
    denoising_strength=0.65,
)
image.save("anime.png")

Chat completions

response = client.chat.completions.create(
    model="gemma-3-12b-it-qat",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain black holes in two sentences."},
    ],
)
print(response["choices"][0]["message"]["content"])

Streaming

for chunk in client.chat.completions.create(
    model="gemma-3-12b-it-qat",
    messages=[{"role": "user", "content": "Write a haiku about Python"}],
    stream=True,
):
    delta = chunk["choices"][0].get("delta", {})
    print(delta.get("content", ""), end="", flush=True)
response = client.chat.completions.create(
    model="gemma-3-27b-it-qat",
    messages=[{"role": "user", "content": "What's the latest news in AI?"}],
    web_search="auto",   # "auto" | "force" | "images" | False
)

JSON mode

response = client.chat.completions.create(
    model="gemma-3-12b-it-qat",
    messages=[{"role": "user", "content": "List 3 languages as JSON."}],
    response_format="json",
)

List models

for m in client.models.list():
    print(m["type"], m["id"])
# text  gemma-3-12b-it-qat
# image RealisticV1
# image AnythingV2

Self-hosted server

client = studiolm.Client(
    api_key="sk-...",
    base_url="http://localhost:8000",
)

Or set STUDIOLM_BASE_URL in your environment.