Python SDK¶
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:
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)
Web search¶
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¶
Or set STUDIOLM_BASE_URL in your environment.