Ultra MAX — addon de catalogues auto-heberge (depot de travail du foyer)
  • JavaScript 63.6%
  • HTML 35.2%
  • Shell 1.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-18 13:50:48 +02:00
.claude FOXA-1935 — CLAUDE.md de 479 à 181 lignes, les procédures d'un flux en skills 2026-09-23 13:05:01 +00:00
.github/workflows chore(deps): update actions/checkout action to v7 2026-09-08 14:04:54 +02:00
addon Update dependency dotenv to v18.0.8 2026-10-14 18:06:23 +02:00
audit Le jeton que quatre rapports disaient supprimé 2026-08-03 10:48:45 +02:00
data Sortir l'état d'exécution du dépôt 2026-08-02 10:50:22 +02:00
docs Publier le contrat d'historique que l'addon attend du dos 2026-08-02 17:14:23 +02:00
rapports/UltraMax FOXA-1698 : récit 1078 → 1084 et rapport du déploiement 2026-09-20 22:15:11 +02:00
scripts deployer : vérifier la place libre du LXC 112 avant la construction (FOXA-2360) 2026-09-27 10:41:00 +00:00
web FOXA-2327 — les clés d'API quittent l'URL de la page de réglage 2026-09-27 05:36:04 +00:00
.env.example Add NUVIO_API_BASE and NUVIO_ANON_KEY env vars for collection sync 2026-08-01 17:33:23 +00:00
.gitignore FOXA-1935 — CLAUDE.md de 479 à 181 lignes, les procédures d'un flux en skills 2026-09-23 13:05:01 +00:00
.ignore outillage local : graft ignoré, hooks et configuration MCP du poste 2026-08-16 03:47:38 +02:00
.mcp.json outillage local : graft ignoré, hooks et configuration MCP du poste 2026-08-16 03:47:38 +02:00
AGENTS.md FOXA-89 — restaure AGENTS.md comme lien symbolique vers CLAUDE.md (sed avait cassé le lien) 2026-08-19 19:54:01 +02:00
CLAUDE-chiffres-archive.md UMX-AFFICHES — la salle d'attente TMDB était plus petite qu'une seule rangée 2026-08-19 10:29:56 +02:00
CLAUDE.md FOXA-2327 — les clés d'API quittent l'URL de la page de réglage 2026-09-27 05:36:04 +00:00
docker-compose.yml perf(ram) : plafond de tas Node — 197 Mo de RSS pour un addon qui n'en a pas besoin 2026-10-18 13:39:18 +02:00
docker-entrypoint.sh Security hardening — bcrypt, atomic writes, rate limiting, non-root Docker 2026-07-26 13:25:31 +00:00
Dockerfile chore(deps): update node.js to v24 2026-09-08 14:04:55 +02:00
HANDOFF.md FOXA-2327 — les clés d'API quittent l'URL de la page de réglage 2026-09-27 05:36:04 +00:00
JOURNAL.md FOXA-2327 — les clés d'API quittent l'URL de la page de réglage 2026-09-27 05:36:04 +00:00
LICENSE Initial release — Ultra MAX v7.8.0 self-host package 2026-07-26 08:39:19 +00:00
README.md Initial release — Ultra MAX v7.8.0 self-host package 2026-07-26 08:39:19 +00:00
renovate.json feat: les majeures Renovate fusionnent aussi, sur porte verte 2026-09-08 19:59:28 +02:00

Ultra MAX — Self-Host

Ultra MAX is a highly customisable catalog addon for Stremio and Nuvio — trending titles, streaming-service rows, genres, curated collections, studios, decades, Trakt/Simkl/MAL/AniList integrations, and a builder UI for choosing exactly what shows up on your home screen and in what order.

This repo is the self-hostable version. If you'd rather not run your own instance, the maintained hosted version is at https://ultramax.vip.

Licence

Ultra MAX is licensed under AGPL v3. The short version: you're free to run, modify and self-host this code. But if you run a modified version of it as a public-facing service — anyone other than you can reach it over a network — you're required to make your modified source available to those users. See LICENSE for the full text. This applies whether you're running it for a Discord server, a friend group, or the general public.

Prerequisites

  • Docker and Docker Compose
  • A domain name pointed at your server, with SSL (a reverse proxy like nginx + Let's Encrypt, or Caddy, or Cloudflare Tunnel — Stremio and Nuvio both require HTTPS for addon installs)
  • A TMDB API key (required — the addon won't start without one)
  • Optional but recommended: an MDBList API key, and OAuth app credentials for whichever of Trakt / Simkl / MyAnimeList / AniList you want to support — see below for each

Quick start

git clone https://github.com/PaRaN01a-hash/Ultramax.git
cd Ultramax
cp .env.example .env
# edit .env — fill in BASE_URL, TMDB_KEY at minimum
docker compose up -d

The addon will be listening on the port you set in .env (7000 by default). Once your reverse proxy is in front of it, your setup page is at https://your-domain.com/setup.html.

Check logs with docker compose logs -f, and confirm it's healthy with curl https://your-domain.com/health.

Reverse proxy (nginx example)

Ultra MAX needs to be reachable over HTTPS at the exact BASE_URL you put in .env — OAuth providers will reject redirect URIs that don't match what's registered, and Stremio/Nuvio won't install an addon served over plain HTTP. A minimal nginx site config, assuming Certbot has already issued a certificate for your domain:

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    client_max_body_size 10m;

    location / {
        proxy_pass http://127.0.0.1:7000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

Trakt OAuth setup

  1. Go to https://trakt.tv/oauth/applications and create a new application.
  2. Set Redirect URI to BASE_URL/auth/trakt/callback — e.g. https://your-domain.com/auth/trakt/callback.
  3. Copy the generated Client ID and Client Secret into TRAKT_CLIENT_ID / TRAKT_CLIENT_SECRET in .env.
  4. Restart the container (docker compose up -d) to pick up the change.

Simkl OAuth setup

  1. Go to https://simkl.com/settings/developer and create a new app.
  2. Set Redirect URI to BASE_URL/auth/simkl/callback.
  3. Copy the Client ID and Client Secret into SIMKL_CLIENT_ID / SIMKL_CLIENT_SECRET in .env.
  4. Restart the container.

MyAnimeList and AniList follow the same pattern (/auth/mal/callback and /auth/anilist/callback respectively) — see the comments in .env.example for their developer-portal links. Both are fully optional: leaving their credentials blank just disables that one integration with a clear message, nothing else breaks.

Data persistence

All per-user state — setup tokens, saved catalog configs, connected OAuth accounts, community share links — lives under the ultramax_data Docker volume (mounted at /data in the container, controlled by DATA_DIR). This is the only thing you need to back up:

docker run --rm -v ultramax_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/ultramax-data-backup.tar.gz -C /data .

Restore by extracting that tarball back into the volume the same way, in reverse.

What's in this repo vs. what isn't

  • addon/ — the backend (catalogs, meta, streams, auth, config storage).
  • web/ — the frontend pages (setup, guide, badges, gallery, changelog).
  • Removed before publishing: real user data (configs.json, shares.json, registered emails, recovery rate-limit state), the production .env, and various internal backup/dev-only files that aren't relevant to a fresh self-host.
  • web/*.html still contain a number of hardcoded links back to ultramax.vip (the community gallery, badge downloads, changelog, etc.) that weren't in scope for this pass — some flows there will point at the hosted site rather than your own instance until that's cleaned up.
  • A handful of preset collection cover images/GIFs in addon/ultramax-collections.json are hotlinked from ultramax.vip's CDN, since those specific styled assets aren't bundled in this repo.

Community