User Tools

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
services:audiomuseai [2025/10/14 08:48] – created willyservices:audiomuseai [2025/10/15 11:57] (current) willy
Line 4: Line 4:
  
 This pairs with [[services:navidrome|Navidrome]], that you need to have installed. This pairs with [[services:navidrome|Navidrome]], that you need to have installed.
 +
 +The AudioMuse-AI developers like you to know that //they are not affiliated with, endorsed by, or sponsored by the owners of audiomuse.ai website.//
  
 ===== Installation ===== ===== Installation =====
 +
 +First of all, AudioMuse-AI requires a CPU with **avx** support, so check that your hardware fit the bill:
 +<code bash>
 +bash ~ # lscpu  | grep -i avx
 +Flags:     fpu [...] avx [..] avx2 [...] arch_capabilities
 +</code>
 +
 +As you can see, my CPU supports AVX and AVX2.
 +
 +Then create the usual dedicated user and data folders for persistency:
 +<code bash>
 +useradd -m -d /data/daemons/audiomuse-ai audiomuse-ai
 +mkdir /data/audiomuse
 +mkdir /data/audiomuse/temp_audio
 +mkdir /data/audiomuse/postgres_data
 +chown -R audiomuse-ai:audiomuse-ai /data/audiomuse
 +</code>
 +
 +and, as user **audiomuse-ai**, create the docker compose file.
 +
 +The docker compose file from [[https://github.com/NeptuneHub/AudioMuse-AI/blob/main/deployment/deployment-navidrome.yaml|https://github.com/NeptuneHub/AudioMuse-AI/blob/main/deployment/deployment-navidrome.yaml]] is really complex and hard to read, and doesn't work with the podman-compose i am using, so, here is the one i have rewritten to make it closer to all the other composers file i use:
 +
 +<file - docker-compose.yaml>
 +services:
 +  audiomuse-ai:
 +    image: ghcr.io/neptunehub/audiomuse-ai:latest
 +    container_name: audiomuse-ai
 +    ports:
 +        - "8925:8000"
 +    volumes:
 +      - /data/audiomuse/temp_audio:/app/temp_audio
 +    environment:
 +        MEDIASERVER_TYPE: "navidrome"
 +        NAVIDROME_URL: "https://navidrome.mydomain.com"
 +        REDIS_URL: "redis://redis:6379/0"
 +        TEMP_DIR: "/app/temp_audio"
 +        SERVICE_TYPE: "flask"
 +        NAVIDROME_USER: "user"
 +        NAVIDROME_PASSWORD: "password"
 +        POSTGRES_USER: "audiomuse"
 +        POSTGRES_PASSWORD: "audiomusepassword"
 +        POSTGRES_DB: "audiomusedb"
 +        POSTGRES_HOST: "postgres"
 +        POSTGRES_PORT: "5432"
 +        GEMINI_API_KEY: "your gemini api key"
 +    depends_on:
 +      - postgres
 +    network:
 +      - audiomuse-ai-net
 +
 +  rq-worker:
 +    container_name: audiomuse-ai-worker
 +    image: ghcr.io/neptunehub/audiomuse-ai:latest
 +#    ports:
 +#        - "8925:8000"
 +    volumes:
 +      - /data/audiomuse/temp_audio:/app/temp_audio
 +    environment:
 +        MEDIASERVER_TYPE: "navidrome"
 +        NAVIDROME_URL: "https://navidrome.mydomain.com"
 +        REDIS_URL: "redis://redis:6379/0"
 +        TEMP_DIR: "/app/temp_audio"
 +        SERVICE_TYPE: "worker"
 +        NAVIDROME_USER: "user"
 +        NAVIDROME_PASSWORD: "password"
 +        POSTGRES_USER: "audiomuse"
 +        POSTGRES_PASSWORD: "audiomusepassword"
 +        POSTGRES_DB: "audiomusedb"
 +        POSTGRES_HOST: "postgres"
 +        POSTGRES_HOST: "postgres"
 +        POSTGRES_PORT: "5432"
 +        GEMINI_API_KEY: ""
 +    depends_on:
 +      - postgres
 +      - redis
 +    network:
 +      - audiomuse-ai-net
 +
 +  postgres:
 +    container_name: postgres
 +    image: postgres:15-alpine
 +    volumes:
 +      - /data/audiomuse/postgres_data:/var/lib/postgresql/data
 +    environment:
 +        SERVICE_TYPE: "flask"
 +        NAVIDROME_USER: "willy"
 +        NAVIDROME_PASSWORD: "Gargiul01="
 +        POSTGRES_USER: "audiomuse"
 +        POSTGRES_PASSWORD: "audiomusepassword"
 +        POSTGRES_DB: "audiomusedb"
 +        POSTGRES_HOST: "postgres"
 +        POSTGRES_PORT: "5432"
 +        GEMINI_API_KEY: ""
 +    network:
 +      - audiomuse-ai-net
 +
 +  redis:
 +    container_name: redis
 +    image: redis:7-alpine
 +    volumes:
 +      - /data/audiomuse/postgres_data:/var/lib/postgresql/data
 +    environment:
 +        SERVICE_TYPE: "flask"
 +        NAVIDROME_USER: "willy"
 +        NAVIDROME_PASSWORD: "Gargiul01="
 +        POSTGRES_USER: "audiomuse"
 +        POSTGRES_PASSWORD: "audiomusepassword"
 +        POSTGRES_DB: "audiomusedb"
 +        POSTGRES_HOST: "postgres"
 +        POSTGRES_PORT: "5432"
 +        GEMINI_API_KEY: ""
 +    network:
 +      - audiomuse-ai-net
 +
 +networks:
 +  audiomuse-ai-net:
 +    dns_enabled: true
 +</file>
 +
 +Of course, you need to specify your Navidrome URL, user and password. The GEMINI key is not required, only if you want AI assisted playlist naming. You could also use a self-hosted OLLAMA.
 +
 +===== Gemini AI usage =====
 +
 +If you want to use the capability to create playlists names using AI, you can use Gemini (and others too). Go to [[https://aistudio.google.com/app/apikey|Google AI studio page]], create a new API key and project, and copy the key itself into the relevant line in the above Docker Compose file.
 +
 +
 +===== Reverse Proxy =====
 +
 +AudioMuse-ai seems to be working only on subdomain and not on subpath. I assume you have **am.mydomain.com**. See the [[selfhost:nginx|F) The Reverse Proxy concept]] for more details.
 +
 +<file - spotizerr.conf>
 +server {
 +        server_name am.mydomain.com;
 +        listen 443 ssl;
 +        http2 on;
 +
 +        access_log /var/log/nginx/am.mydomain.com_access_log main;
 +        error_log /var/log/nginx/am.mydomain.com_error_log info;
 +
 +        location / {
 +                proxy_pass http://127.0.0.1:7171/;
 +                proxy_set_header Connection $http_connection;
 +                proxy_set_header Upgrade $http_upgrade;
 +        }
 +
 +        include com.mydomain/certbot.conf;
 +}
 +
 +server {
 +        server_name am.mydomain.com;
 +        listen 8443 ssl;
 +        http2 on;
 +
 +        access_log /var/log/nginx/am.mydomain.com_access_log main;
 +        error_log /var/log/nginx/am.mydomain.com_error_log info;
 +
 +        include "com.mydomain/authelia_location.conf";
 +
 +        location / {
 +                include "com.mydomain/authelia_proxy.conf";
 +                include "com.mydomain/authelia_authrequest.conf";
 +                proxy_pass http://127.0.0.1:7171/;
 +                proxy_set_header Connection $http_connection;
 +                proxy_set_header Upgrade $http_upgrade;
 +        }
 +
 +        include com.mydomain/certbot.conf;
 +}
 +</file>
 +
 +Please note that AudioMuse-ai does not provide **any** authentication or protection: you **must** put your SSO (see [[selfhost:sso|here]]) and HTTPS on top of it using the reverse proxy as in the above config example.
 +
 +As usual, i have protected with SSO only the external access profile (port 8443).
 +
 +===== Autostart =====
 +
 +
 +To start it, and set it up on boot, as usual follow my indications [[gentoo:containers|Using Containers on Gentoo]], so link the **user-containers** init script:
 +<code>
 +ln -s /etc/init.d/user-containers /etc/init.d/user-containers.audiomuse-ai
 +</code>
 +
 +and create the following config file:
 +<file - user-containers.audiomuse-ai>
 +USER=audiomuse-ai
 +DESCRIPTION="Music analyzer"
 +</file>
 +
 +Add the service to the default runlevel and start it now:
 +<code bash>
 +/etc/init.d/user-containers.audiomuse-ai start
 +rc-update  user-containers.audiomuse-ai
 +</code>
 +