AI Providers & Custom System Prompts
Nine providers: Claude, ChatGPT, Gemini, Grok, DeepSeek, OpenRouter, Hugging Face, Ollama, LM Studio, plus reasoning effort and custom system prompts.
DocumentationAI Providers & Prompts
Models
AI Providers
Aether works with nine AI providers: seven cloud, two local. Switch between them at any time without leaving the chat. Each provider's model list is fetched from the provider itself and cached for a day, so the picker reflects what that provider currently offers. Each provider remembers the model you last used with it, so switching away and back returns you to your own choice rather than a default.
Cloud Providers (API Key Required)
Aether supports seven cloud providers. Model lists come from the provider rather than from a list we maintain, and are refreshed at most once a day. If a provider cannot be reached, Aether falls back to a small built-in list for that provider so you can still work.
- ●Grok (xAI):
api.x.ai - ●ChatGPT (OpenAI):
api.openai.com - ●Claude (Anthropic):
api.anthropic.com - ●Gemini (Google):
generativelanguage.googleapis.com - ●DeepSeek:
api.deepseek.com - ●OpenRouter: aggregator, exposes models from many providers under one key
- ●Hugging Face: inference API for open-weight models
On Gemini, Aether starts on Gemini 3.8 Flash. Google now serves its 2.5 models only to people who already use them, so if Gemini 2.5 fails on your key, choose Gemini 3.8 Flash in the model list. If you had picked a Gemini model Google has since shut down, such as Gemini 2.0 Flash, Aether switches you to the default rather than failing.
On Claude, Aether starts on Sonnet 5.5. If your saved Claude model has since been shut down by Anthropic, such as Sonnet 4 (the old default) or Opus 4.1, Aether switches you to the default rather than failing.
The newest Claude models (Opus 5 and 5.5, Sonnet 5.5 and Fable) can also decline a request on safety grounds. When one does, the chat says so and shows the reason Anthropic gives, and another Claude model in the list will usually answer it.
Your API key is stored by your operating system's own credential store: the macOS Keychain or Windows Credential Manager. It is never written in plain text to a settings file. On a Mac, the first time Aether reads your key inside a host it has not used before (Logic Pro, Ableton Live, the standalone app and so on), macOS may ask for your login password to let it use the Keychain. Choose Always Allow and it will not ask again in that host.
Getting an API Key
Each cloud provider issues keys from its own developer console, and bills its API use to you directly. A ChatGPT Plus, Claude Pro or Gemini subscription does not include API access, so you need a key even if you already pay for one. Create a key on the page below, then in Aether click Settings at the top right (or press Cmd + ,, Ctrl + , on Windows), choose the provider under LLM Provider, paste the key into API Key and click Save.
| Provider | Where to get a key |
|---|---|
| Claude (Anthropic) | platform.claude.com |
| ChatGPT (OpenAI) | platform.openai.com |
| Gemini (Google) | aistudio.google.com |
| Grok (xAI) | console.x.ai |
| DeepSeek | platform.deepseek.com |
| OpenRouter | openrouter.ai |
| Hugging Face | huggingface.co |
Several providers offer a free tier with lower limits. To skip keys entirely, run a local model through Ollama or LM Studio, below.
Filtering the OpenRouter model list
OpenRouter aggregates hundreds of models from many upstream providers, which can make the model dropdown overwhelming. Open Settings and use the Providers picker to tick exactly which upstream providers (Anthropic, OpenAI, Google, and so on) appear in the list, with Select all / Clear all and Save. Your choice applies to both the Settings and chat-panel model dropdowns. Aether also hides each provider's irrelevant models automatically (image, audio, embedding, and dev-only SKUs).
Reasoning Effort
Reasoning models can think before they answer, and Aether lets you say how hard. A Reasoning Effort control appears in Settings whenever the model you have selected supports it. It starts on Medium, except on Grok, which starts on High, and on Claude, which starts on Model default. The choice is saved per provider, so each one keeps your preference.
| Setting | What you get |
|---|---|
| Low | Fastest and cheapest. On Gemini this cuts thinking to the minimum the model allows. |
| Medium | A balance of musical judgement against time and token cost. |
| High | The most considered musical decisions, at the cost of slower generations and more tokens. |
| Model default | Claude only. Aether sends no setting, so each model thinks as hard as Anthropic set it to: Sonnet 5.5 at High, Opus 5.5 at Medium. |
It shows up for the reasoning models: Grok, OpenAI's o-series and GPT-5 family including the Pro models, Gemini 2.5 and later, and Claude Opus 4.5 and later, Sonnet 4.6 and later and Fable. On models that do not take it, the control is hidden rather than ignored.
Some models refuse the lower settings and Aether respects the model rather than fighting it, so on a few of the heaviest Pro models your choice may be raised to the lowest level that model accepts. If a provider rejects the setting outright, Aether retries once without it rather than failing your generation.
Local Providers
| Provider | Server Address | How It Works |
|---|---|---|
| Ollama | localhost:11434 | No API key, fully offline. Start the server, then click Refresh Models in Aether to list what you have installed. |
| LM Studio | localhost:1234 | No API key, fully offline. Start the server in the Developer tab, then click Refresh Models in Aether. |
The server can also run on another computer on your network. Enter its address in Settings, for example http://192.168.1.20:11434 or http://studio-mac.local:11434, and let that server accept network connections: start Ollama with OLLAMA_HOST=0.0.0.0, or turn on Serve on Local Network in LM Studio. Plain http works only for this computer and your local network, and Settings tells you when an address cannot be used.
Structured Output & Resilient Parsing
Where the provider's API supports it, Aether uses native structured-output schemas to constrain the response shape. Where it doesn't, the prompt itself enforces JSON output. Either way, a resilient parser auto-repairs the most common LLM formatting quirks: missing velocity, extra fields, out-of-range values, millisecond-scale timestamps, and inline arithmetic.
Customization
Custom System Prompts
Aether lets you keep a library of named custom system prompts and choose which one is active. Your active prompt is appended to the built-in generation engine on every request: it shapes style and conventions but never overrides Aether's core format and safety rules. Use it to lock in your preferred style, enforce harmonic conventions, or set creative rules that persist across generations.
The two tabs choose separately. Settings carries Active prompt for Melodic and Active prompt for Drums, and both pick from the same library, so a prompt you write once can serve one tab or both. They are separate because they ask for different things: a note about chord voicings is noise in a request for a beat, and one about hat swing is noise in a request for a progression. A melodic prompt never reaches the Drums tab, and a drum prompt never reaches Melodic.
Use Cases
On the Melodic tab:
- ●"Always use jazz voicings with 7ths and 9ths": enforces harmonic preferences
- ●"Keep melodies within a one-octave range": constrains output style
- ●"Use syncopated rhythms and avoid landing on beat 1": shapes rhythmic feel
- ●"Write with the harmonic color of Debussy": sets an artistic reference point
- ●"Never use notes below C3": restricts the pitch range for specific instruments
On the Drums tab, where a preference shapes feel, kit vocabulary and dynamics:
- ●"Ghost notes on the snare in every bar": sets a dynamic habit
- ●"Never use the ride, only closed and open hats": narrows the kit vocabulary
- ●"Keep the kick off beat 1 unless the section is a drop": shapes placement
- ●"Hats always swung, never straight": sets a standing feel
What a preference cannot do
A drum preference does not override the piece names, the output format or the velocity rules; those stand whatever it says. Asking for something that fights them, such as "always answer in plain English", is asking the model to break the parser. If your current message contradicts a standing preference, the message wins.Managing Your Prompt Library
Open Settings (the Settings button at the top right, or Cmd + ,) and go to the System Prompt tab. From there you can create a new prompt, rename or delete existing ones, edit a prompt's body inline, and set which prompt is active for each tab. With no prompt active, Aether uses its default behavior. Editing a prompt takes effect on your next generation; there is nothing to re-select.
A prompt name can be up to 80 characters and its body up to 100,000, which is far more room than a style guide needs. The library itself is global, so every project sees the same set of prompts, while which one is active is saved per project, for each tab independently. That means a session reopens with the style you were working in, and a prompt you delete simply stops applying to any project that pointed at it.
The drum selection starts empty, including in projects saved before it existed. A prompt you wrote for melodic work will not begin steering your beats because you reopened an old session; you choose it for Drums deliberately or not at all.
Per-Provider Temperature
In the same settings area you can optionally pin a fixed creativity (temperature) value for a specific provider, overriding Aether's default. This is handy for dialing in consistent behavior from a model that runs too hot or too conservative for your taste.
Gemini 3 models are the exception: Google tunes them for their default temperature, so Aether leaves it unset and the control is disabled while one is selected.
On ChatGPT, only the GPT-4 family takes a temperature. Every other ChatGPT model, such as GPT-5 and the o-series, runs at its own default, so Aether leaves it unset and the control is disabled while one is selected.
On Claude, Opus 4.7 and later, Sonnet 5 and later and the Fable models run at their own default too, so Aether leaves temperature unset and the control is disabled while one is selected. Opus 4.6, Sonnet 4.6, Haiku 4.5 and earlier still take it.
Questions