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

Your API key is stored by your operating system's own credential store: the macOS Keychain, Windows Credential Manager, or the system keyring on Linux. It is never written in plain text to a settings file.

Filtering the OpenRouter model list

Tick only the upstream providers you want to see in the 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, with three settings and a default of Medium. The choice is saved per provider, so each one keeps your preference.

SettingWhat you get
LowFastest and cheapest. On Gemini this turns thinking off altogether.
MediumThe default. A balance of musical judgement against time and token cost.
HighThe most considered musical decisions, at the cost of slower generations and more tokens.

It shows up for the reasoning models: Grok, OpenAI's o-series and GPT-5 family including the Pro models, and Gemini 2.5 and later. On models that do not reason, 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

ProviderServer AddressHow It Works
Ollamalocalhost:11434No API key, fully offline. Start the server, then click Refresh Models in Aether to list what you have installed.
LM Studiolocalhost:1234No API key, fully offline. Start the server in the Developer tab, then click Refresh Models in Aether.

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 in the style of Bill Evans": 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

Settings, System Prompt. Both tabs choose from one library. The library is global; which prompt is active is saved per project, for each tab independently.

Open Settings (gear icon 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.

Questions

Common Questions

Which AI providers does Aether support?

Nine: Claude, ChatGPT, Gemini, Grok, DeepSeek, OpenRouter and Hugging Face in the cloud, plus Ollama and LM Studio running locally on your own machine.

Can I use Aether without sending anything to the cloud?

Yes. Run a model in Ollama or LM Studio and no prompt or key leaves your machine. That is the most private way to use Aether, and there is no per-request cost.

Where is my API key stored?

In your operating system's own credential store: the macOS Keychain, Windows Credential Manager, or the system keyring on Linux. It is never written in plain text to a settings file, and it is only ever sent to the provider it belongs to.