<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Aether</title><link>https://andresbott.github.io/aether/</link><description>Recent content on Aether</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://andresbott.github.io/aether/index.xml" rel="self" type="application/rss+xml"/><item><title>Installation</title><link>https://andresbott.github.io/aether/docs/getting-started/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://andresbott.github.io/aether/docs/getting-started/installation/</guid><description>&lt;h1 id="installation"&gt;Installation&lt;a class="anchor" href="#installation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Every &lt;a href="https://github.com/andresbott/aether/releases/latest"&gt;release&lt;/a&gt; ships:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Download&lt;/th&gt;
 &lt;th&gt;For&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;aether_&amp;lt;version&amp;gt;_linux_amd64_v1.deb&lt;/code&gt;, &lt;code&gt;…_amd64_v3.deb&lt;/code&gt;, &lt;code&gt;…_linux_arm64.deb&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Debian, Ubuntu and derivatives&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ghcr.io/andresbott/aether&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Docker / Podman, amd64 and arm64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;aether_Linux_*.zip&lt;/code&gt;, &lt;code&gt;aether_Windows_*.zip&lt;/code&gt;, &lt;code&gt;aether_Darwin_*.zip&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;the plain binary, any other system&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;aether-spa.zip&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;the web UI on its own (rarely needed, see below)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;v1&lt;/code&gt; or &lt;code&gt;v3&lt;/code&gt;?&lt;/strong&gt; The amd64 builds come in two flavours. &lt;code&gt;v3&lt;/code&gt; is a little faster
and needs a CPU from 2013 (Intel Haswell) or 2017 (AMD Zen) onwards; &lt;code&gt;v1&lt;/code&gt; runs on
any 64-bit x86 CPU. A &lt;code&gt;v3&lt;/code&gt; build on an older CPU exits immediately with an
&amp;ldquo;illegal instruction&amp;rdquo; error — pick &lt;code&gt;v1&lt;/code&gt; when unsure.&lt;/p&gt;</description></item><item><title>Libraries</title><link>https://andresbott.github.io/aether/docs/guides/libraries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://andresbott.github.io/aether/docs/guides/libraries/</guid><description>&lt;h1 id="libraries"&gt;Libraries&lt;a class="anchor" href="#libraries"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A &lt;strong&gt;library&lt;/strong&gt; is what you browse: a named, saved filter over everything that was
scanned — not a directory. The same album can sit in several libraries, and
deleting a library never deletes music. Subsonic apps see each library as a
music folder.&lt;/p&gt;
&lt;p&gt;Create one under &lt;strong&gt;Settings → Libraries → Add library&lt;/strong&gt;. Besides a name and an
icon, a library sets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which views it offers — Discover, Artists, Albums — and the one it opens on;&lt;/li&gt;
&lt;li&gt;whether the sidebar gives it one entry or one per view;&lt;/li&gt;
&lt;li&gt;whether its artists are hidden from the main Artists page;&lt;/li&gt;
&lt;li&gt;up to 20 filters.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class="shot shot-panel"&gt;
 &lt;picture class="shot-frame"&gt;
 &lt;img src="https://andresbott.github.io/aether/screenshots/library-dialog.png" width="704" height="754" alt="The library dialog: views, sidebar entries and filters, with the live match count" loading="lazy" decoding="async" /&gt;
 &lt;/picture&gt;
 &lt;figcaption&gt;The library dialog: views, sidebar entries and filters, with the live match count&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id="filters"&gt;Filters&lt;a class="anchor" href="#filters"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Filter&lt;/th&gt;
 &lt;th&gt;Matches tracks…&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Scan folder&lt;/td&gt;
 &lt;td&gt;indexed under one of the chosen &lt;a href="https://andresbott.github.io/aether/docs/getting-started/configuration/#scan-folders"&gt;scan folders&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Folder path&lt;/td&gt;
 &lt;td&gt;stored under one of the chosen directories&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;File format&lt;/td&gt;
 &lt;td&gt;with one of the chosen extensions (&lt;code&gt;flac&lt;/code&gt;, &lt;code&gt;mp3&lt;/code&gt;, …)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Release type&lt;/td&gt;
 &lt;td&gt;on an album of one of the chosen types; &amp;ldquo;(none)&amp;rdquo; means untyped albums&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compilation&lt;/td&gt;
 &lt;td&gt;on a compilation album (Yes) or on any other album (No)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Genre&lt;/td&gt;
 &lt;td&gt;tagged with one of the chosen genres&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A track must pass &lt;strong&gt;every&lt;/strong&gt; filter; within one filter, &lt;strong&gt;any&lt;/strong&gt; of its values is
enough. A library without filters is the whole catalog. While you edit, the
dialog shows how many tracks and albums the filters match.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://andresbott.github.io/aether/docs/getting-started/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://andresbott.github.io/aether/docs/getting-started/configuration/</guid><description>&lt;h1 id="configuration"&gt;Configuration&lt;a class="anchor" href="#configuration"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Aether reads one YAML file. Every option is annotated in the
&lt;a href="https://github.com/andresbott/aether/blob/main/server/zarf/packaging/config.yaml"&gt;packaged config&lt;/a&gt;;
this page covers the ones you will touch.&lt;/p&gt;
&lt;h2 id="where-the-config-comes-from"&gt;Where the config comes from&lt;a class="anchor" href="#where-the-config-comes-from"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aether start -c /path/to/config.yaml&lt;/code&gt; uses that file. The path must exist — a
typo is an error, not a silent fallback.&lt;/li&gt;
&lt;li&gt;Without &lt;code&gt;-c&lt;/code&gt;, Aether tries &lt;code&gt;./config.yaml&lt;/code&gt;, then &lt;code&gt;/etc/aether/config.yaml&lt;/code&gt;,
and uses the first one that exists. With neither, built-in defaults apply.&lt;/li&gt;
&lt;li&gt;Environment variables override the file: &lt;code&gt;AETHER_&lt;/code&gt; plus the key path in
capitals, e.g. &lt;code&gt;AETHER_SERVER_PORT=8080&lt;/code&gt; or &lt;code&gt;AETHER_AUTH_METHOD=native&lt;/code&gt;.
Lists such as &lt;code&gt;ScanFolders&lt;/code&gt; can only be set in the file.&lt;/li&gt;
&lt;li&gt;Secrets can live in their own file: a value starting with &lt;code&gt;@&lt;/code&gt; is read from
that path, e.g. &lt;code&gt;FanartApiKey: &amp;quot;@/etc/aether/fanart.api.key&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Restart the server after changing the config.&lt;/p&gt;</description></item><item><title>Connecting apps</title><link>https://andresbott.github.io/aether/docs/guides/connecting-apps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://andresbott.github.io/aether/docs/guides/connecting-apps/</guid><description>&lt;h1 id="connecting-apps"&gt;Connecting apps&lt;a class="anchor" href="#connecting-apps"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Aether speaks the &lt;a href="https://opensubsonic.netlify.app/"&gt;OpenSubsonic&lt;/a&gt; API, so any
Subsonic or OpenSubsonic app can use it — Symfonium, DSub, play:Sub and many
more. In the app, enter your server&amp;rsquo;s address, e.g.
&lt;code&gt;https://music.example.com&lt;/code&gt; or &lt;code&gt;http://192.168.1.10:8075&lt;/code&gt;, and the credentials
below.&lt;/p&gt;
&lt;h2 id="credentials"&gt;Credentials&lt;a class="anchor" href="#credentials"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;With authentication off&lt;/strong&gt; (&lt;code&gt;Auth.Method: none&lt;/code&gt;), the API asks for nothing:
any username and password work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With authentication on&lt;/strong&gt;, your own password never works in an app. Each app
gets its own credentials instead, so you can revoke one without touching the
others. Open &lt;strong&gt;User settings → Connected apps&lt;/strong&gt; from your account menu:&lt;/p&gt;</description></item><item><title>Authentication</title><link>https://andresbott.github.io/aether/docs/guides/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://andresbott.github.io/aether/docs/guides/authentication/</guid><description>&lt;h1 id="authentication"&gt;Authentication&lt;a class="anchor" href="#authentication"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;Auth.Method&lt;/code&gt; in the config picks one of three modes:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Who signs you in&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;nobody — no users, no login. Trusted networks only. &lt;strong&gt;The default.&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;native&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Aether: users live in its database and it shows its own login page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;proxy-header&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;your reverse proxy (Authelia, Authentik, oauth2-proxy), which passes the user on in headers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In both authenticated modes, users are either admins or regular users. Admins
get &lt;strong&gt;Settings&lt;/strong&gt; — libraries, tasks, users — and the metadata editor; everyone
gets their own playlists, stars, play queue and history. Apps never use the
login password, see &lt;a href="https://andresbott.github.io/aether/docs/guides/connecting-apps/"&gt;Connecting apps&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Pre-release status</title><link>https://andresbott.github.io/aether/docs/getting-started/pre-release/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://andresbott.github.io/aether/docs/getting-started/pre-release/</guid><description>&lt;h1 id="pre-release-status"&gt;Pre-release status&lt;a class="anchor" href="#pre-release-status"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Aether has no stable release yet. Until it does, any new version may change the
configuration file or the database, with no migration from what an older
version left behind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configuration.&lt;/strong&gt; Options can be renamed, moved or removed. After an
upgrade, compare your config with the
&lt;a href="https://github.com/andresbott/aether/blob/main/server/zarf/packaging/config.yaml"&gt;packaged config&lt;/a&gt;
of the new version.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database.&lt;/strong&gt; A new version may not work with an older version&amp;rsquo;s database.
The way out is an empty data directory and a fresh scan.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="your-files-are-the-source-of-truth"&gt;Your files are the source of truth&lt;a class="anchor" href="#your-files-are-the-source-of-truth"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Aether is built so that losing its database costs you a rescan, not your
collection. What it knows about your music comes from the files — tags,
embedded and folder covers — and the metadata editor writes its changes back
into them. A scan reads all of it again.&lt;/p&gt;</description></item></channel></rss>