Merge pull request #404 from maxdorninger/mkdocs
This PR replaces Gitbook with Mkdocs to provide documentation
51
.github/workflows/docs.yml
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
name: Publish docs via GitHub Pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- v*
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Configure Git Credentials
|
||||
run: |
|
||||
git config user.name github-actions[bot]
|
||||
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.14
|
||||
|
||||
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
key: mkdocs-material-${{ env.cache_id }}
|
||||
path: .cache
|
||||
restore-keys: |
|
||||
mkdocs-material-
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install mkdocs-material mike
|
||||
|
||||
- name: Deploy (master)
|
||||
if: github.ref == 'refs/heads/master'
|
||||
run: |
|
||||
mike deploy --push --update-aliases master
|
||||
|
||||
- name: Deploy (tag)
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
version=${GITHUB_REF#refs/tags/}
|
||||
mike deploy --push --update-aliases $version latest --title "$version"
|
||||
|
||||
4
.gitignore
vendored
@@ -49,5 +49,5 @@ __pycache__
|
||||
# Postgres
|
||||
/postgres
|
||||
|
||||
# Node modules
|
||||
/node_modules/*
|
||||
# MkDocs
|
||||
site/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<br />
|
||||
<div align="center">
|
||||
<a href="https://maximilian-dorninger.gitbook.io/mediamanager">
|
||||
<img src="https://github.com/maxdorninger/MediaManager/blob/master/web/static/logo.svg" alt="Logo" width="260" height="260">
|
||||
<img src="https://raw.githubusercontent.com/maxdorninger/MediaManager/refs/heads/master/web/static/logo.svg" alt="Logo" width="260" height="260">
|
||||
</a>
|
||||
|
||||
<h3 align="center">MediaManager</h3>
|
||||
|
||||
@@ -56,6 +56,15 @@ services:
|
||||
- ./web:/app
|
||||
depends_on:
|
||||
- mediamanager
|
||||
docs:
|
||||
image: squidfunk/mkdocs-material:9
|
||||
container_name: mediamanager-docs
|
||||
volumes:
|
||||
- .:/docs
|
||||
ports:
|
||||
- "9000:9000"
|
||||
command: serve -w /docs -a 0.0.0.0:9000
|
||||
|
||||
|
||||
# ----------------------------
|
||||
# Additional services can be uncommented and configured as needed
|
||||
@@ -130,17 +139,17 @@ services:
|
||||
# ports:
|
||||
# - 8081:8080
|
||||
# restart: unless-stopped
|
||||
# jackett:
|
||||
# image: lscr.io/linuxserver/jackett:latest
|
||||
# container_name: jackett
|
||||
# environment:
|
||||
# - PUID=1000
|
||||
# - PGID=1000
|
||||
# - TZ=Etc/UTC
|
||||
# - AUTO_UPDATE=true
|
||||
# volumes:
|
||||
# - ./res/jackett/data:/config
|
||||
# - ./res/jackett/torrents:/downloads
|
||||
# ports:
|
||||
# - 9117:9117
|
||||
# restart: unless-stopped
|
||||
jackett:
|
||||
image: lscr.io/linuxserver/jackett:latest
|
||||
container_name: jackett
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
- AUTO_UPDATE=true
|
||||
volumes:
|
||||
- ./res/jackett/data:/config
|
||||
- ./res/jackett/torrents:/downloads
|
||||
ports:
|
||||
- 9117:9117
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
layout:
|
||||
width: default
|
||||
title:
|
||||
visible: true
|
||||
description:
|
||||
visible: true
|
||||
tableOfContents:
|
||||
visible: true
|
||||
outline:
|
||||
visible: false
|
||||
pagination:
|
||||
visible: true
|
||||
metadata:
|
||||
visible: true
|
||||
---
|
||||
|
||||
# MediaManager
|
||||
|
||||
MediaManager is the modern, easy-to-use successor to the fragmented "Arr" stack. Manage, discover, and automate your TV and movie collection in a single, simple interface.
|
||||
|
||||
_Replaces Sonarr, Radarr, Seerr, and more._
|
||||
|
||||
### Quick Links
|
||||
|
||||
<table data-view="cards" data-full-width="false"><thead><tr><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center">Installation Guide</td><td><a href="installation/">installation</a></td></tr><tr><td align="center">Configuration</td><td><a href="configuration/">configuration</a></td></tr><tr><td align="center">Developer Guide</td><td><a href="contributing-to-mediamanager/developer-guide.md">developer-guide.md</a></td></tr><tr><td align="center">Troubleshooting</td><td><a href="troubleshooting.md">troubleshooting.md</a></td></tr><tr><td align="center">Advanced Features</td><td><a href="advanced-features/">advanced-features</a></td></tr><tr><td align="center">Import Existing Media</td><td><a href="importing-existing-media.md">importing-existing-media.md</a></td></tr></tbody></table>
|
||||
|
||||
## Support MediaManager & Maximilian Dorninger
|
||||
|
||||
<table data-card-size="large" data-view="cards" data-full-width="false"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Sponsor me on GitHub Sponsors :)</td><td><a href="https://github.com/sponsors/maxdorninger">https://github.com/sponsors/maxdorninger</a></td><td></td></tr><tr><td>Buy me a coffee :)</td><td><a href="https://buymeacoffee.com/maxdorninger">https://buymeacoffee.com/maxdorninger</a></td><td></td></tr></tbody></table>
|
||||
|
||||
### MediaManager Sponsors
|
||||
|
||||
<table data-view="cards" data-full-width="false"><thead><tr><th>Sponsor</th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Aljaž Mur Eržen</td><td><a href="https://fosstodon.org/@aljazmerzen">https://fosstodon.org/@aljazmerzen</a></td><td><a href="https://github.com/aljazerzen.png">https://github.com/aljazerzen.png</a></td></tr><tr><td>Luis Rodriguez</td><td><a href="https://github.com/ldrrp">https://github.com/ldrrp</a></td><td><a href="https://github.com/ldrrp.png">https://github.com/ldrrp.png</a></td></tr><tr><td>Brandon P.</td><td><a href="https://github.com/brandon-dacrib">https://github.com/brandon-dacrib</a></td><td><a href="https://github.com/brandon-dacrib.png">https://github.com/brandon-dacrib.png</a></td></tr><tr><td>SeimusS</td><td><a href="https://github.com/SeimusS">https://github.com/SeimusS</a></td><td><a href="https://github.com/SeimusS.png">https://github.com/SeimusS.png</a></td></tr><tr><td>HadrienKerlero</td><td><a href="https://github.com/HadrienKerlero">https://github.com/HadrienKerlero</a></td><td><a href="https://github.com/HadrienKerlero.png">https://github.com/HadrienKerlero.png</a></td></tr><tr><td>keyxmakerx</td><td><a href="https://github.com/keyxmakerx">https://github.com/keyxmakerx</a></td><td><a href="https://github.com/keyxmakerx.png">https://github.com/keyxmakerx.png</a></td></tr><tr><td>LITUATUI</td><td><a href="https://github.com/LITUATUI">https://github.com/LITUATUI</a></td><td><a href="https://github.com/LITUATUI.png">https://github.com/LITUATUI.png</a></td></tr><tr><td>Nicolas</td><td><a href="https://buymeacoffee.com/maxdorninger">https://buymeacoffee.com/maxdorninger</a></td><td><a href="https://cdn.buymeacoffee.com/uploads/profile_pictures/default/v2/B6CDBD/NI.png">https://cdn.buymeacoffee.com/uploads/profile_pictures/default/v2/B6CDBD/NI.png</a></td></tr><tr><td>Josh</td><td><a href="https://buymeacoffee.com/maxdorninger">https://buymeacoffee.com/maxdorninger</a></td><td><a href="https://cdn.buymeacoffee.com/uploads/profile_pictures/default/v2/DEBBB9/JO.png">https://cdn.buymeacoffee.com/uploads/profile_pictures/default/v2/DEBBB9/JO.png</a></td></tr><tr><td>PuppiestDoggo</td><td><a href="https://buymeacoffee.com/maxdorninger">https://buymeacoffee.com/maxdorninger</a></td><td><a href="https://cdn.buymeacoffee.com/uploads/profile_pictures/2025/11/2VeQ8sTGPhj4tiLy.jpg">https://cdn.buymeacoffee.com/uploads/profile_pictures/2025/11/2VeQ8sTGPhj4tiLy.jpg</a></td></tr><tr><td>Seferino</td><td><a href="https://github.com/seferino-fernandez">https://github.com/seferino-fernandez</a></td><td><a href="https://avatars.githubusercontent.com/u/5546622">https://avatars.githubusercontent.com/u/5546622</a></td></tr><tr><td>Powered by DigitalOcean</td><td><a href="https://m.do.co/c/4edf05429dca">https://m.do.co/c/4edf05429dca</a></td><td data-object-fit="contain"><a href="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_vertical_blue.svg">https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_vertical_blue.svg</a></td></tr></tbody></table>
|
||||
@@ -1,33 +0,0 @@
|
||||
# Table of contents
|
||||
|
||||
* [MediaManager](README.md)
|
||||
* [Installation Guide](installation/README.md)
|
||||
* [Docker Compose](installation/docker.md)
|
||||
* [Nix Flakes \[Community\]](installation/flakes.md)
|
||||
* [Importing existing media](importing-existing-media.md)
|
||||
* [Usage](usage.md)
|
||||
* [Configuration](configuration/README.md)
|
||||
* [Backend](configuration/backend.md)
|
||||
* [Authentication](configuration/authentication.md)
|
||||
* [Database](configuration/database.md)
|
||||
* [Download Clients](configuration/download-clients.md)
|
||||
* [Indexers](configuration/indexers.md)
|
||||
* [Scoring Rulesets](configuration/scoring-rulesets.md)
|
||||
* [Notifications](configuration/notifications.md)
|
||||
* [Custom Libraries](configuration/custom-libraries.md)
|
||||
* [Logging](configuration/logging.md)
|
||||
* [Advanced Features](advanced-features/README.md)
|
||||
* [qBittorrent Category](advanced-features/qbittorrent-category.md)
|
||||
* [URL Prefix](advanced-features/url-prefix.md)
|
||||
* [Metadata Provider Configuration](advanced-features/metadata-provider-configuration.md)
|
||||
* [Custom port](advanced-features/custom-port.md)
|
||||
* [Follow symlinks in frontend files](advanced-features/follow-symlinks-in-frontend-files.md)
|
||||
* [Disable startup ascii art](advanced-features/disable-startup-ascii-art.md)
|
||||
* [Troubleshooting](troubleshooting.md)
|
||||
* [API Reference](api-reference.md)
|
||||
* [Screenshots](screenshots.md)
|
||||
|
||||
## Contributing to MediaManager
|
||||
|
||||
* [Developer Guide](contributing-to-mediamanager/developer-guide.md)
|
||||
* [Documentation](contributing-to-mediamanager/documentation.md)
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
description: >-
|
||||
The features in this section are not required to run MediaManager and serve
|
||||
their purpose in very specific environments, but they can enhance your
|
||||
experience and provide additional functionality.
|
||||
---
|
||||
|
||||
# Advanced Features
|
||||
|
||||
@@ -7,8 +7,6 @@ MediaManager can be configured to follow symlinks when serving frontend files. T
|
||||
* `FRONTEND_FOLLOW_SYMLINKS`\
|
||||
Set this environment variable to `true` to follow symlinks when serving frontend files. Default is `false`.
|
||||
|
||||
{% code title=".env" %}
|
||||
```bash
|
||||
```bash title=".env"
|
||||
FRONTEND_FOLLOW_SYMLINKS=true
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
@@ -8,9 +8,8 @@ Metadata provider settings are configured in the `[metadata]` section of your `c
|
||||
|
||||
TMDB (The Movie Database) is the primary metadata provider for MediaManager. It provides detailed information about movies and TV shows.
|
||||
|
||||
{% hint style="info" %}
|
||||
Other software like Jellyfin use TMDB as well, so there won't be any metadata discrepancies.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
Other software like Jellyfin use TMDB as well, so there won't be any metadata discrepancies.
|
||||
|
||||
* `tmdb_relay_url`\
|
||||
URL of the TMDB relay (MetadataRelay). Default is `https://metadata-relay.dorninger.co/tmdb`. Example: `https://your-own-relay.example.com/tmdb`.
|
||||
@@ -19,24 +18,21 @@ Other software like Jellyfin use TMDB as well, so there won't be any metadata di
|
||||
* `default_language`\
|
||||
TMDB language parameter used when searching and adding. Default is `en`. Format: ISO 639-1 (2 letters).
|
||||
|
||||
{% hint style="warning" %}
|
||||
`default_language` sets the TMDB `language` parameter when searching and adding TV shows and movies. If TMDB does not find a matching translation, metadata in the original language will be fetched with no option for a fallback language. It is therefore highly advised to only use "broad" languages. For most use cases, the default setting is safest.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
`default_language` sets the TMDB `language` parameter when searching and adding TV shows and movies. If TMDB does not find a matching translation, metadata in the original language will be fetched with no option for a fallback language. It is therefore highly advised to only use "broad" languages. For most use cases, the default setting is safest.
|
||||
|
||||
### TVDB Settings (`[metadata.tvdb]`)
|
||||
|
||||
{% hint style="warning" %}
|
||||
The TVDB might provide false metadata and doesn't support some features of MediaManager like showing overviews. Therefore, TMDB is the preferred metadata provider.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
The TVDB might provide false metadata and doesn't support some features of MediaManager like showing overviews. Therefore, TMDB is the preferred metadata provider.
|
||||
|
||||
* `tvdb_relay_url`\
|
||||
URL of the TVDB relay (MetadataRelay). Default is `https://metadata-relay.dorninger.co/tvdb`. Example: `https://your-own-relay.example.com/tvdb`.
|
||||
|
||||
### MetadataRelay
|
||||
|
||||
{% hint style="info" %}
|
||||
To use MediaManager you don't need to set up your own MetadataRelay, as the default relay hosted by the developer should be sufficient for most purposes.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
To use MediaManager you don't need to set up your own MetadataRelay, as the default relay hosted by the developer should be sufficient for most purposes.
|
||||
|
||||
The MetadataRelay is a service that provides metadata for MediaManager. It acts as a proxy for TMDB and TVDB, allowing you to use your own API keys if needed, but the default relay means you don't need to create accounts for API keys yourself.
|
||||
|
||||
@@ -47,16 +43,14 @@ You might want to use your own relay if you want to avoid rate limits, protect y
|
||||
* Get a TMDB API key from [The Movie Database](https://www.themoviedb.org/settings/api)
|
||||
* Get a TVDB API key from [The TVDB](https://thetvdb.com/auth/register)
|
||||
|
||||
{% hint style="info" %}
|
||||
If you want to use your own MetadataRelay, you can set the `tmdb_relay_url` and/or `tvdb_relay_url` to your own relay service.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
If you want to use your own MetadataRelay, you can set the `tmdb_relay_url` and/or `tvdb_relay_url` to your own relay service.
|
||||
|
||||
### Example Configuration
|
||||
|
||||
Here's a complete example of the metadata section in your `config.toml`:
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[metadata]
|
||||
# TMDB configuration
|
||||
[metadata.tmdb]
|
||||
@@ -66,8 +60,6 @@ Here's a complete example of the metadata section in your `config.toml`:
|
||||
[metadata.tvdb]
|
||||
tvdb_relay_url = "https://metadata-relay.dorninger.co/tvdb"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
In most cases, you can simply use the default values and don't need to specify these settings in your config file at all.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
In most cases, you can simply use the default values and don't need to specify these settings in your config file at all.
|
||||
|
||||
@@ -9,10 +9,8 @@ Use the following variables to customize behavior:
|
||||
* `torrents.qbittorrent.category_save_path`\
|
||||
Save path for the category in qBittorrent. By default, no subdirectory is used. Example: `/data/torrents/MediaManager`.
|
||||
|
||||
{% hint style="info" %}
|
||||
qBittorrent saves torrents to the path specified by `torrents.qbittorrent.category_save_path`, so it must be a valid path that qBittorrent can write to.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
qBittorrent saves torrents to the path specified by `torrents.qbittorrent.category_save_path`, so it must be a valid path that qBittorrent can write to.
|
||||
|
||||
{% hint style="warning" %}
|
||||
For MediaManager to successfully import torrents, you must add the subdirectory to the `misc.torrent_directory` variable.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
For MediaManager to successfully import torrents, you must add the subdirectory to the `misc.torrent_directory` variable.
|
||||
|
||||
@@ -6,23 +6,20 @@ In order to run it on a prefixed path, like `maxdorninger.github.io/media`, the
|
||||
|
||||
In short, clone the repository, then run:
|
||||
|
||||
{% code title="Build Docker image" %}
|
||||
```none
|
||||
```none title="Build Docker image"
|
||||
docker build \
|
||||
--build-arg BASE_PATH=/media \
|
||||
--build-arg VERSION=my-custom-version \
|
||||
-t MediaManager:my-custom-version \
|
||||
-f Dockerfile .
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
You also need to set the `BASE_PATH` environment variable at runtime in `docker-compose.yaml`:
|
||||
|
||||
* `BASE_PATH`\
|
||||
Base path prefix MediaManager is served under. Example: `/media`. This must match the `BASE_PATH` build arg.
|
||||
|
||||
{% code title="docker-compose.yaml (excerpt)" %}
|
||||
```yaml
|
||||
```yaml title="docker-compose.yaml (excerpt)"
|
||||
services:
|
||||
mediamanager:
|
||||
image: MediaManager:my-custom-version
|
||||
@@ -32,10 +29,8 @@ services:
|
||||
BASE_PATH: /media
|
||||
...
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Make sure to include the base path in the `frontend_url` field in the config file. See [Backend](../configuration/backend.md).
|
||||
{% endhint %}
|
||||
!!! info
|
||||
Make sure to include the base path in the `frontend_url` field in the config file. See [Backend](../configuration/backend.md).
|
||||
|
||||
Finally, ensure that whatever reverse proxy you're using leaves the incoming path unchanged; that is, you should not strip the `/media` from `/media/web/`.
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
# API Reference
|
||||
|
||||
{% hint style="info" %}
|
||||
Media Manager's backend is built with FastAPI, which automatically generates interactive API documentation.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
Media Manager's backend is built with FastAPI, which automatically generates interactive API documentation.
|
||||
|
||||
* Swagger UI (typically available at `http://localhost:8000/docs`)
|
||||
* ReDoc (typically available at `http://localhost:8000/redoc`)
|
||||
|
||||
|
Before Width: | Height: | Size: 3.1 MiB After Width: | Height: | Size: 3.1 MiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 244 KiB After Width: | Height: | Size: 244 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.9 MiB After Width: | Height: | Size: 8.9 MiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 5.5 MiB After Width: | Height: | Size: 5.5 MiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 7.6 MiB After Width: | Height: | Size: 7.6 MiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
158
docs/assets/logo.svg
Normal file
@@ -0,0 +1,158 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
width="2000"
|
||||
height="2000"
|
||||
viewBox="0 0 2000 2000"
|
||||
sodipodi:docname="logo2.svg"
|
||||
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1">
|
||||
<path
|
||||
d="M 0,1500 H 1500 V 0 H 0 Z"
|
||||
id="path1"/>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3">
|
||||
<path
|
||||
d="M 0,0 H 1500 V 1500 H 0 Z"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,2000)"
|
||||
id="path3"/>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4">
|
||||
<path
|
||||
d="M -17.6886,1032.99 H 1106.27 V 238.53 H -17.6886 Z"
|
||||
transform="translate(-319.61281,-1032.9941)"
|
||||
id="path4"/>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath6">
|
||||
<path
|
||||
d="M 0,0 H 1500 V 1500 H 0 Z"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,2000)"
|
||||
id="path6"/>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath7">
|
||||
<path
|
||||
d="M 223.314,1226.85 H 1182.49 V 548.867 H 223.314 Z"
|
||||
transform="translate(-894.64255,-548.86681)"
|
||||
id="path7"/>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath9">
|
||||
<path
|
||||
d="M 0,0 H 1500 V 1500 H 0 Z"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,2000)"
|
||||
id="path9"/>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath10">
|
||||
<path
|
||||
d="M 301.561,1098.17 H 1517.73 V 238.53 H 301.561 Z"
|
||||
transform="translate(-666.53282,-1098.1678)"
|
||||
id="path10"/>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath12">
|
||||
<path
|
||||
d="M 0,0 H 1500 V 1500 H 0 Z"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,2000)"
|
||||
id="path12"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="0.9075"
|
||||
inkscape:cx="999.44904"
|
||||
inkscape:cy="1000"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2054"
|
||||
inkscape:window-x="3373"
|
||||
inkscape:window-y="199"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g1">
|
||||
<inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:label="1"
|
||||
id="page1"
|
||||
width="2000"
|
||||
height="2000"
|
||||
margin="0"
|
||||
bleed="0"/>
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
id="g1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="1">
|
||||
<g
|
||||
id="g2"
|
||||
clip-path="url(#clipPath3)">
|
||||
<path
|
||||
d="M 0,0 H 1500 V 1500 H 0 Z"
|
||||
style="fill:#9ed8f7;fill-opacity:0;fill-rule:nonzero;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,2000)"
|
||||
clip-path="url(#clipPath1)"
|
||||
id="path2"/>
|
||||
</g>
|
||||
<g
|
||||
opacity="0.720001"
|
||||
id="g5"
|
||||
clip-path="url(#clipPath6)">
|
||||
<path
|
||||
d="m 0,0 h 669.787 c 68.994,0 116.873,-68.746 92.95,-133.46 L 542.309,-729.728 c -14.382,-38.904 -51.472,-64.736 -92.95,-64.736 h -669.787 c -68.994,0 -116.873,68.746 -92.949,133.46 L -92.949,-64.736 C -78.567,-25.832 -41.478,0 0,0"
|
||||
style="fill:#2842fc;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,426.1504,622.67453)"
|
||||
clip-path="url(#clipPath4)"
|
||||
id="path5"/>
|
||||
</g>
|
||||
<g
|
||||
opacity="0.720001"
|
||||
id="g8"
|
||||
clip-path="url(#clipPath9)">
|
||||
<path
|
||||
d="m 0,0 h -571.59 c -58.879,0 -99.738,58.667 -79.322,113.893 l 188.111,508.849 c 12.274,33.201 43.925,55.246 79.322,55.246 h 571.59 c 58.879,0 99.739,-58.667 79.322,-113.894 L 79.322,55.245 C 67.049,22.045 35.397,0 0,0"
|
||||
style="fill:#ff5e00;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,1192.8567,1268.1776)"
|
||||
clip-path="url(#clipPath7)"
|
||||
id="path8"/>
|
||||
</g>
|
||||
<g
|
||||
opacity="0.75"
|
||||
id="g11"
|
||||
clip-path="url(#clipPath12)">
|
||||
<path
|
||||
d="m 0,0 h 724.733 c 74.654,0 126.46,-74.386 100.575,-144.408 L 586.797,-789.591 c -15.562,-42.096 -55.694,-70.047 -100.575,-70.047 h -724.733 c -74.654,0 -126.461,74.386 -100.574,144.409 l 238.511,645.182 C -85.013,-27.952 -44.88,0 0,0"
|
||||
style="fill:#f20a4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,888.7104,535.77627)"
|
||||
clip-path="url(#clipPath10)"
|
||||
id="path11"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
@@ -6,9 +6,8 @@ Frontend settings are configured through environment variables in your `docker-c
|
||||
|
||||
## Configuration File Location
|
||||
|
||||
{% hint style="warning" %}
|
||||
Note that MediaManager may need to be restarted for changes in the config file to take effect.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
Note that MediaManager may need to be restarted for changes in the config file to take effect.
|
||||
|
||||
Your `config.toml` file should be in the directory that's mounted to `/app/config/config.toml` inside the container:
|
||||
|
||||
@@ -66,6 +65,5 @@ MEDIAMANAGER_AUTH__OPENID_CONNECT__CLIENT_SECRET = "your_client_secret_from_prov
|
||||
|
||||
So for every config "level", you basically have to take the name of the value and prepend it with the section names in uppercase with 2 underscores as delimiters and `MEDIAMANAGER_` as the prefix.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Note that not every env variable starts with `MEDIAMANAGER_`; this prefix only applies to env variables which replace/overwrite values in the config file. Variables like the `CONFIG_DIR` env variable must not be prefixed.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
Note that not every env variable starts with `MEDIAMANAGER_`; this prefix only applies to env variables which replace/overwrite values in the config file. Variables like the `CONFIG_DIR` env variable must not be prefixed.
|
||||
|
||||
@@ -20,13 +20,11 @@ All authentication settings are configured in the `[auth]` section of your `conf
|
||||
* `email_password_resets`\
|
||||
Enables password resets via email. Default is `false`.
|
||||
|
||||
{% hint style="info" %}
|
||||
To use email password resets, you must also configure SMTP settings in the `[notifications.smtp_config]` section.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
To use email password resets, you must also configure SMTP settings in the `[notifications.smtp_config]` section.
|
||||
|
||||
{% hint style="info" %}
|
||||
When setting up MediaManager for the first time, you should add your email to `admin_emails` in the `[auth]` config section. MediaManager will then use this email instead of the default admin email. Your account will automatically be created as an admin account, allowing you to manage other users, media and settings.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
When setting up MediaManager for the first time, you should add your email to `admin_emails` in the `[auth]` config section. MediaManager will then use this email instead of the default admin email. Your account will automatically be created as an admin account, allowing you to manage other users, media and settings.
|
||||
|
||||
## OpenID Connect Settings (`[auth.openid_connect]`)
|
||||
|
||||
@@ -53,22 +51,20 @@ The OpenID server will likely require a redirect URI. This URL will usually look
|
||||
{MEDIAMANAGER_URL}/api/v1/auth/oauth/callback
|
||||
```
|
||||
|
||||
{% hint style="warning" %}
|
||||
It is very important that you set the correct callback URI, otherwise it won't work!
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
It is very important that you set the correct callback URI, otherwise it won't work!
|
||||
|
||||
#### Authentik Example
|
||||
|
||||
Here is an example configuration for the OpenID Connect provider for Authentik.
|
||||
|
||||

|
||||

|
||||
|
||||
## Example Configuration
|
||||
|
||||
Here's a complete example of the authentication section in your `config.toml`:
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[auth]
|
||||
token_secret = "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6"
|
||||
session_lifetime = 604800 # 1 week
|
||||
@@ -82,4 +78,4 @@ client_secret = "your-secret-key-here"
|
||||
configuration_endpoint = "https://auth.example.com/.well-known/openid-configuration"
|
||||
name = "Authentik"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
|
||||
@@ -26,8 +26,7 @@ description: >-
|
||||
|
||||
Here's a complete example of the general settings section in your `config.toml`:
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[misc]
|
||||
|
||||
# REQUIRED: Change this to match your actual frontend domain.
|
||||
@@ -38,8 +37,6 @@ cors_urls = ["http://localhost:8000"]
|
||||
# Optional: Development mode (set to true for debugging)
|
||||
development = false
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
The `frontend_url` is the most important setting to configure correctly. Make sure it matches your actual deployment URLs.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
The `frontend_url` is the most important setting to configure correctly. Make sure it matches your actual deployment URLs.
|
||||
|
||||
@@ -6,9 +6,8 @@ MediaManager supports custom libraries, allowing you to add multiple folders for
|
||||
|
||||
Custom libraries are configured in the `misc` section in the `config.toml` file. You can add as many libraries as you need.
|
||||
|
||||
{% hint style="info" %}
|
||||
You are not limited to `/data/tv` or `/data/movies`, you can choose the entire path freely!
|
||||
{% endhint %}
|
||||
!!! info
|
||||
You are not limited to `/data/tv` or `/data/movies`, you can choose the entire path freely!
|
||||
|
||||
### Movie Libraries
|
||||
|
||||
|
||||
@@ -19,8 +19,7 @@ Database settings are configured in the `[database]` section of your `config.tom
|
||||
|
||||
Here's a complete example of the database section in your `config.toml`:
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[database]
|
||||
host = "db"
|
||||
port = 5432
|
||||
@@ -28,8 +27,6 @@ user = "MediaManager"
|
||||
password = "your_secure_password"
|
||||
dbname = "MediaManager"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
In docker-compose deployments the container name is simultaneously its hostname, so you can use "db" or "postgres" as host.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
In docker-compose deployments the container name is simultaneously its hostname, so you can use "db" or "postgres" as host.
|
||||
|
||||
@@ -19,9 +19,8 @@ qBittorrent is a popular BitTorrent client that MediaManager can integrate with
|
||||
|
||||
## Transmission Settings (`[torrents.transmission]`)
|
||||
|
||||
{% hint style="info" %}
|
||||
The downloads path in Transmission and MediaManager must be the same, i.e. the path `/data/torrents` must link to the same volume for both containers.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
The downloads path in Transmission and MediaManager must be the same, i.e. the path `/data/torrents` must link to the same volume for both containers.
|
||||
|
||||
Transmission is a BitTorrent client that MediaManager can integrate with for downloading torrents.
|
||||
|
||||
@@ -59,8 +58,7 @@ SABnzbd is a Usenet newsreader that MediaManager can integrate with for download
|
||||
|
||||
Here's a complete example of the download clients section in your `config.toml`:
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[torrents]
|
||||
# qBittorrent configuration
|
||||
[torrents.qbittorrent]
|
||||
@@ -87,14 +85,12 @@ Here's a complete example of the download clients section in your `config.toml`:
|
||||
port = 8080
|
||||
api_key = "your_sabnzbd_api_key"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Docker Compose Integration
|
||||
|
||||
When using Docker Compose, make sure your download clients are accessible from the MediaManager backend:
|
||||
|
||||
{% code title="docker-compose.yml" %}
|
||||
```yaml
|
||||
```yaml title="docker-compose.yml"
|
||||
services:
|
||||
# MediaManager backend
|
||||
backend:
|
||||
@@ -121,12 +117,9 @@ services:
|
||||
- ./data/usenet:/downloads
|
||||
# ... other configuration ...
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
You should enable only one BitTorrent and only one Usenet Download Client at any time.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
You should enable only one BitTorrent and only one Usenet Download Client at any time.
|
||||
|
||||
{% hint style="info" %}
|
||||
Make sure the download directories in your download clients are accessible to MediaManager for proper file management and organization.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
Make sure the download directories in your download clients are accessible to MediaManager for proper file management and organization.
|
||||
|
||||
@@ -13,9 +13,8 @@ Indexer settings are configured in the `[indexers]` section of your `config.toml
|
||||
* `timeout_seconds`\
|
||||
Timeout in seconds for requests to Prowlarr. Default is `60`.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Symptoms of timeouts are typically no search results ("No torrents found!") in conjunction with logs showing read timeouts.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
Symptoms of timeouts are typically no search results ("No torrents found!") in conjunction with logs showing read timeouts.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -50,8 +49,7 @@ DEBUG - media_manager.indexer.utils -
|
||||
|
||||
## Example Configuration
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[indexers]
|
||||
[indexers.prowlarr]
|
||||
enabled = true
|
||||
@@ -66,4 +64,4 @@ api_key = "your_jackett_api_key"
|
||||
indexers = ["1337x", "rarbg"]
|
||||
timeout_seconds = 60
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
|
||||
@@ -57,8 +57,7 @@ Controls which emails receive notifications.
|
||||
|
||||
Here's a complete example of the notifications section in your `config.toml`:
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[notifications]
|
||||
# SMTP settings for email notifications and password resets
|
||||
[notifications.smtp_config]
|
||||
@@ -91,8 +90,7 @@ Here's a complete example of the notifications section in your `config.toml`:
|
||||
api_key = "your_pushover_api_key"
|
||||
user = "your_pushover_user_key"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
You can enable multiple notification methods simultaneously. For example, you could have both email and Gotify notifications enabled at the same time.
|
||||
{% endhint %}
|
||||
|
||||
!!! info
|
||||
You can enable multiple notification methods simultaneously. For example, you could have both email and Gotify notifications enabled at the same time.
|
||||
|
||||
@@ -17,9 +17,8 @@ Rules define how MediaManager scores releases based on their titles or indexer f
|
||||
* Reject releases that do not meet certain criteria (e.g., non-freeleech releases).
|
||||
* and more.
|
||||
|
||||
{% hint style="info" %}
|
||||
The keywords and flags are compared case-insensitively.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
The keywords and flags are compared case-insensitively.
|
||||
|
||||
### Title Rules
|
||||
|
||||
@@ -38,8 +37,7 @@ Each title rule consists of:
|
||||
|
||||
Examples for Title Rules
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[[indexers.title_scoring_rules]]
|
||||
name = "prefer_h265"
|
||||
keywords = ["h265", "hevc", "x265"]
|
||||
@@ -52,7 +50,6 @@ keywords = ["cam", "ts"]
|
||||
score_modifier = -10000
|
||||
negate = false
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
* The first rule increases the score for releases containing "h265", "hevc", or "x265".
|
||||
* The second rule heavily penalizes releases containing "cam" or "ts".
|
||||
@@ -76,8 +73,7 @@ Each indexer flag rule consists of:
|
||||
|
||||
Examples for Indexer Flag Rules
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[[indexers.indexer_flag_scoring_rules]]
|
||||
name = "reject_non_freeleech"
|
||||
flags = ["freeleech", "freeleech75"]
|
||||
@@ -90,7 +86,6 @@ flags = ["nuked"]
|
||||
score_modifier = -10000
|
||||
negate = false
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
* The first rule penalizes releases that do not have the "freeleech" or "freeleech75" flag.
|
||||
* The second rule penalizes releases that are marked as "nuked".
|
||||
@@ -99,8 +94,7 @@ If `negate` is set to `true`, the `score_modifier` is applied only if none of th
|
||||
|
||||
## Example
|
||||
|
||||
{% code title="config.toml" %}
|
||||
```toml
|
||||
```toml title="config.toml"
|
||||
[[indexers.scoring_rule_sets]]
|
||||
name = "default"
|
||||
libraries = ["ALL_TV", "ALL_MOVIES"]
|
||||
@@ -111,7 +105,6 @@ name = "strict_quality"
|
||||
libraries = ["ALL_MOVIES"]
|
||||
rule_names = ["prefer_h265", "avoid_cam", "reject_non_freeleech"]
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Libraries
|
||||
|
||||
@@ -127,9 +120,8 @@ You can use special library names in your rulesets:
|
||||
|
||||
This allows you to set global rules for all TV or movie content, or provide fallback rules for uncategorized media.
|
||||
|
||||
{% hint style="info" %}
|
||||
You don't need to create lots of libraries with different directories, multiple libraries can share the same directory. You can set multiple (unlimited) libraries to the default directory `/data/movies` or `/data/tv` and use different rulesets with them.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
You don't need to create lots of libraries with different directories, multiple libraries can share the same directory. You can set multiple (unlimited) libraries to the default directory `/data/movies` or `/data/tv` and use different rulesets with them.
|
||||
|
||||
## Relation to Sonarr/Radarr Profiles
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ description: >-
|
||||
|
||||
* `media_manager/`: Backend FastAPI application
|
||||
* `web/`: Frontend SvelteKit application
|
||||
* `docs/`: Documentation (GitBook)
|
||||
* `docs/`: Documentation (MkDocs)
|
||||
* `metadata_relay/`: Metadata relay service, also FastAPI
|
||||
|
||||
## Special Dev Configuration
|
||||
@@ -44,9 +44,8 @@ MediaManager uses various environment variables for configuration. In the Docker
|
||||
* `DISABLE_FRONTEND_MOUNT`\
|
||||
When `TRUE`, disables mounting built frontend files (allows separate frontend container).
|
||||
|
||||
{% hint style="info" %}
|
||||
This is automatically set in `docker-compose.dev.yaml` to enable the separate frontend development container
|
||||
{% endhint %}
|
||||
!!! info
|
||||
This is automatically set in `docker-compose.dev.yaml` to enable the separate frontend development container
|
||||
|
||||
#### Configuration Files
|
||||
|
||||
@@ -105,10 +104,9 @@ This means when your browser makes a request to `http://localhost:5173/api/v1/tv
|
||||
|
||||
### Setting up the full development environment with Docker (Recommended)
|
||||
|
||||
This is the easiest and recommended way to get started. Everything runs in Docker with hot-reloading enabled.
|
||||
|
||||
{% stepper %}
|
||||
{% step %}
|
||||
|
||||
|
||||
### Prepare config files
|
||||
|
||||
Create config directory (only needed on first run) and copy example config files:
|
||||
@@ -118,9 +116,9 @@ mkdir -p res/config # Only needed on first run
|
||||
cp config.dev.toml res/config/config.toml
|
||||
cp web/.env.example web/.env
|
||||
```
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
### Start all services
|
||||
|
||||
Recommended: Use make commands for easy development
|
||||
@@ -135,9 +133,9 @@ Alternative: Use docker compose directly (if make is not available)
|
||||
```bash
|
||||
docker compose -f docker-compose.dev.yaml up
|
||||
```
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
### Access the application
|
||||
|
||||
* Frontend (with HMR): http://localhost:5173
|
||||
@@ -151,12 +149,10 @@ Now you can edit code and see changes instantly:
|
||||
* Edit Python files → Backend auto-reloads
|
||||
* Edit Svelte/TypeScript files → Frontend HMR updates in browser
|
||||
* Edit config.toml → Changes apply immediately
|
||||
{% endstep %}
|
||||
{% endstepper %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Run `make help` to see all available development commands including `make down`, `make logs`, `make app` (shell into backend), and more.
|
||||
{% endhint %}
|
||||
|
||||
!!! info
|
||||
Run `make help` to see all available development commands including `make down`, `make logs`, `make app` (shell into backend), and more.
|
||||
|
||||
## Setting up the backend development environment (Local)
|
||||
|
||||
@@ -217,18 +213,17 @@ ruff check .
|
||||
|
||||
## Setting up the frontend development environment (Local, Optional)
|
||||
|
||||
Using the Docker setup above is recommended. This section is for those who prefer to run the frontend locally outside of Docker.
|
||||
|
||||
{% stepper %}
|
||||
{% step %}
|
||||
|
||||
|
||||
### Clone & change dir
|
||||
|
||||
1. Clone the repository
|
||||
2. cd into repo root
|
||||
3. cd into `web` directory
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
### Install Node.js (example using nvm-windows)
|
||||
|
||||
I used nvm-windows:
|
||||
@@ -243,9 +238,9 @@ If using PowerShell you may need:
|
||||
```powershell
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
```
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
### Create .env for frontend
|
||||
|
||||
```bash
|
||||
@@ -253,18 +248,18 @@ cp .env.example .env
|
||||
```
|
||||
|
||||
Update `PUBLIC_API_URL` if your backend is not at `http://localhost:8000`
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
### Install dependencies and run dev server
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
### Format & lint
|
||||
|
||||
* Format:
|
||||
@@ -278,12 +273,10 @@ npm run format
|
||||
```bash
|
||||
npm run lint
|
||||
```
|
||||
{% endstep %}
|
||||
{% endstepper %}
|
||||
|
||||
{% hint style="info" %}
|
||||
If running frontend locally, make sure to add `http://localhost:5173` to the `cors_urls` in your backend config file.
|
||||
{% endhint %}
|
||||
|
||||
!!! info
|
||||
If running frontend locally, make sure to add `http://localhost:5173` to the `cors_urls` in your backend config file.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
# Documentation
|
||||
|
||||
MediaManager currently uses GitBook for documentation.
|
||||
MediaManager uses [MkDocs](https://www.mkdocs.org/) with
|
||||
the [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) theme for documentation.
|
||||
|
||||
The files for the documentation are in the \`/docs\` directory. They are \_mostly\_ standard markdown.
|
||||
The files for the documentation are in the `/docs` directory.
|
||||
|
||||
Unfortunately GitBook doesn't provide a way to locally preview the documentation. Instead you can submit a PR with your proposed changes and a GitBook workflow will run which will provide a link to the preview.
|
||||
To preview the documentation locally, you need to have mkdocs or Docker installed.
|
||||
|
||||
To access the preview just open the \`Details\` link.
|
||||
## How to preview the documentation locally with docker
|
||||
|
||||
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
1. Run the mkdocs container in `docker-compose.dev.yaml`
|
||||
|
||||
2. Open `http://127.0.0.1:9000/` in your browser.
|
||||
@@ -23,9 +23,8 @@ Here is an example, using these rules:
|
||||
|
||||
If your folder structure is in the correct format, you can start importing. To do this, log in as an administrator and go to the TV/movie dashboard.
|
||||
|
||||
{% hint style="info" %}
|
||||
After importing, MediaManager will automatically prefix the old root TV show/movie folders with a dot to mark them as "imported".
|
||||
{% endhint %}
|
||||
!!! info
|
||||
After importing, MediaManager will automatically prefix the old root TV show/movie folders with a dot to mark them as "imported".
|
||||
|
||||
So after importing, the directory would look like this (using the above directory structure):
|
||||
|
||||
|
||||
2
docs/index.md
Normal file
@@ -0,0 +1,2 @@
|
||||
--8<-- "README.md"
|
||||
|
||||
@@ -2,4 +2,5 @@
|
||||
|
||||
The recommended way to install and run Media Manager is using Docker and Docker Compose. Other installation methods are not officially supported, but listed here for convenience.
|
||||
|
||||
<table data-view="cards" data-full-width="false"><thead><tr><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center">Docker Compose (recommended)</td><td><a href="docker.md">docker.md</a></td></tr><tr><td align="center">Nix Flakes [Community]</td><td><a href="flakes.md">flakes.md</a></td></tr></tbody></table>
|
||||
[Docker Compose (recommended)](docker.md){ .md-button .md-button--primary }
|
||||
[Nix Flakes [Community]](flakes.md){ .md-button }
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
Follow these steps to get MediaManager running with Docker Compose:
|
||||
|
||||
{% stepper %}
|
||||
{% step %}
|
||||
|
||||
|
||||
#### Get the docker-compose file
|
||||
|
||||
Download the `docker-compose.yaml` from the MediaManager repo:
|
||||
@@ -18,9 +18,9 @@ Download the `docker-compose.yaml` from the MediaManager repo:
|
||||
```bash
|
||||
wget -O docker-compose.yaml https://github.com/maxdorninger/MediaManager/releases/latest/download/docker-compose.yaml
|
||||
```
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
#### Prepare configuration directory and example config
|
||||
|
||||
Create a config directory and download the example configuration:
|
||||
@@ -29,15 +29,15 @@ Create a config directory and download the example configuration:
|
||||
mkdir config
|
||||
wget -O ./config/config.toml https://github.com/maxdorninger/MediaManager/releases/latest/download/config.example.toml
|
||||
```
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
|
||||
|
||||
#### Edit configuration
|
||||
|
||||
You probably need to edit the `config.toml` file in the `./config` directory to suit your environment and preferences. [How to configure MediaManager.](configuration/)
|
||||
{% endstep %}
|
||||
You probably need to edit the `config.toml` file in the `./config` directory to suit your environment and preferences. [How to configure MediaManager.](../configuration/README.md)
|
||||
|
||||
|
||||
|
||||
{% step %}
|
||||
#### Start MediaManager
|
||||
|
||||
Bring up the stack:
|
||||
@@ -45,16 +45,15 @@ Bring up the stack:
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
{% endstep %}
|
||||
{% endstepper %}
|
||||
|
||||
|
||||
|
||||
* Upon first run, MediaManager will create a default `config.toml` file in the `./config` directory (if not already present).
|
||||
* Upon first run, MediaManager will also create a default admin user. The credentials of the default admin user will be printed in the logs of the container — it's recommended to change the password of this user after the first login.
|
||||
* [For more information on the available configuration options, see the Configuration section of the documentation.](configuration/)
|
||||
* [For more information on the available configuration options, see the Configuration section of the documentation.](../configuration/README.md)
|
||||
|
||||
{% hint style="info" %}
|
||||
When setting up MediaManager for the first time, you should add your email to `admin_emails` in the `[auth]` config section. MediaManager will then use this email instead of the default admin email. Your account will automatically be created as an admin account, allowing you to manage other users, media, and settings.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
When setting up MediaManager for the first time, you should add your email to `admin_emails` in the `[auth]` config section. MediaManager will then use this email instead of the default admin email. Your account will automatically be created as an admin account, allowing you to manage other users, media, and settings.
|
||||
|
||||
## Docker Images
|
||||
|
||||
@@ -70,9 +69,8 @@ MetadataRelay images are also available on both registries:
|
||||
|
||||
From v1.12.1 onwards, both MediaManager and MetadataRelay images are available on both Quay.io and GHCR. The reason for the switch to Quay.io as the primary image registry is due to [GHCR's continued slow performance.](https://github.com/orgs/community/discussions/173607)
|
||||
|
||||
{% hint style="info" %}
|
||||
You can use either the Quay.io or GHCR images interchangeably, as they are built from the same source and the tags are the same across both registries.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
You can use either the Quay.io or GHCR images interchangeably, as they are built from the same source and the tags are the same across both registries.
|
||||
|
||||
### Tags
|
||||
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
# Nix Flakes
|
||||
|
||||
{% hint style="note" %}
|
||||
This is a community contribution and not officially supported by the MediaManager team, but included here for convenience.
|
||||
{% endhint %}
|
||||
!!! note
|
||||
This is a community contribution and not officially supported by the MediaManager team, but included here for convenience.
|
||||
|
||||
*Please report issues with this method at the [corresponding GitHub repository](https://github.com/strangeglyph/mediamanager-nix).*
|
||||
</note>
|
||||
*Please report issues with this method at the [corresponding GitHub repository](https://github.com/strangeglyph/mediamanager-nix).*
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -64,12 +62,11 @@ The host and port that MediaManager listens on can be set using `services.media-
|
||||
To configure MediaManager, use `services.media-manager.settings`, which follows the same structure as the MediaManager
|
||||
`config.toml`. To provision secrets, set `services.media-manager.environmentFile` to a protected file, for example one
|
||||
provided by [agenix](https://github.com/ryantm/agenix) or [sops-nix](https://github.com/Mic92/sops-nix).
|
||||
See [Configuration](Configuration.md#configuring-secrets) for guidance on using environment variables.
|
||||
See [Configuration](../configuration/README.md#configuring-secrets) for guidance on using environment variables.
|
||||
|
||||
|
||||
{% hint style="warning" %}
|
||||
Do not place secrets in the nix store, as it is world-readable.
|
||||
{% endhint %}
|
||||
!!! warning
|
||||
Do not place secrets in the nix store, as it is world-readable.
|
||||
|
||||
## Automatic Postgres Setup
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Screenshots
|
||||
|
||||
{% hint style="info" %}
|
||||
MediaManager also supports darkmode!
|
||||
{% endhint %}
|
||||
!!! info
|
||||
MediaManager also supports darkmode!
|
||||
|
||||
      
|
||||
      
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
# Troubleshooting
|
||||
|
||||
{% hint style="info" %}
|
||||
Always check the container and browser logs for more specific error messages
|
||||
{% endhint %}
|
||||
!!! info
|
||||
Always check the container and browser logs for more specific error messages
|
||||
|
||||
<details>
|
||||
|
||||
@@ -60,10 +59,9 @@ Switch to advanced tabTry switching to the advanced tab when searching for torre
|
||||
#### Possible Fixes:
|
||||
|
||||
* [Unable to pull image from GitHub Container Registry (Stack Overflow)](https://stackoverflow.com/questions/74656167/unable-to-pull-image-from-github-container-registry-ghcr)
|
||||
* [Try pulling the image from Quay.io](/broken/pages/09241b2fcda5d337e8878e4052f4634fe2902d10#mediamanager-and-metadatarelay-docker-images)
|
||||
* [Try pulling the image from Quay.io](installation/docker.md#docker-images)
|
||||
|
||||
</details>
|
||||
|
||||
{% hint style="info" %}
|
||||
If it still doesn't work, [please open an Issue.](https://github.com/maxdorninger/MediaManager/issues) It is possible that a bug is causing the issue.
|
||||
{% endhint %}
|
||||
!!! info
|
||||
If it still doesn't work, [please open an Issue.](https://github.com/maxdorninger/MediaManager/issues) It is possible that a bug is causing the issue.
|
||||
|
||||
133
docs/usage.md
@@ -1,133 +0,0 @@
|
||||
# Usage
|
||||
|
||||
If you are coming from Radarr or Sonarr you will find that MediaManager does things a bit differently. Instead of completely automatically downloading and managing your media, MediaManager focuses on providing an easy-to-use interface to guide you through the process of finding and downloading media. Advanced features like multiple qualities of a show/movie necessitate such a paradigm shift. So here is a quick step-by-step guide to get you started:
|
||||
|
||||
#### Downloading/Requesting a show
|
||||
|
||||
{% stepper %}
|
||||
{% step %}
|
||||
### Add the show
|
||||
|
||||
Add a show on the "Add Show" page. After adding the show you will be redirected to the show's page.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Request season(s)
|
||||
|
||||
Click the "Request Season" button on the show's page. Select one or more seasons that you want to download.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Select qualities
|
||||
|
||||
Select the "Min Quality" — the minimum resolution of the content to download.\
|
||||
Select the "Wanted Quality" — the **maximum** resolution of the content to download.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Submit request
|
||||
|
||||
Click "Submit request". This is not the last step: an administrator must first approve your request for download. Only after approval will the requested content be downloaded.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Finished
|
||||
|
||||
Congratulation! You've downloaded a show (after admin approval).
|
||||
{% endstep %}
|
||||
{% endstepper %}
|
||||
|
||||
#### Requesting a show (as an admin)
|
||||
|
||||
{% stepper %}
|
||||
{% step %}
|
||||
### Add the show
|
||||
|
||||
Add a show on the "Add Show" page. After adding the show you will be redirected to the show's page.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Request season(s)
|
||||
|
||||
Click the "Request Season" button on the show's page. Select one or more seasons that you want to download.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Select qualities
|
||||
|
||||
Select the "Min Quality" — the minimum resolution of the content to download.\
|
||||
Select the "Wanted Quality" — the **maximum** resolution of the content to download.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Submit request (auto-approved)
|
||||
|
||||
Click "Submit request". As an admin, your request will be automatically approved.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Finished
|
||||
|
||||
Congratulation! You've downloaded a show.
|
||||
{% endstep %}
|
||||
{% endstepper %}
|
||||
|
||||
#### Downloading a show (admin-only)
|
||||
|
||||
You can only directly download a show if you are an admin!
|
||||
|
||||
{% stepper %}
|
||||
{% step %}
|
||||
### Go to the show's page
|
||||
|
||||
Open the show's page that contains the season you wish to download.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Start download
|
||||
|
||||
Click the "Download Season" button.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Enter season number
|
||||
|
||||
Enter the season number that you want to download.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Optional file path suffix
|
||||
|
||||
Optionally select the "File Path Suffix". Note: **it needs to be unique per season per show!**
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Choose torrent and download
|
||||
|
||||
Click "Download" on the torrent that you want to download.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Finished
|
||||
|
||||
Congratulation! You've downloaded a show.
|
||||
{% endstep %}
|
||||
{% endstepper %}
|
||||
|
||||
#### Managing requests
|
||||
|
||||
Users need their requests to be approved by an admin. To manage requests:
|
||||
|
||||
{% stepper %}
|
||||
{% step %}
|
||||
### Open Requests page
|
||||
|
||||
Go to the "Requests" page.
|
||||
{% endstep %}
|
||||
|
||||
{% step %}
|
||||
### Approve, delete or modify
|
||||
|
||||
From the Requests page you can approve, delete, or modify a user's request.
|
||||
{% endstep %}
|
||||
{% endstepper %}
|
||||
70
mkdocs.yml
Normal file
@@ -0,0 +1,70 @@
|
||||
site_name: "MediaManager Documentation"
|
||||
theme:
|
||||
name: "material"
|
||||
logo: "assets/logo.svg"
|
||||
favicon: "assets/logo.svg"
|
||||
features:
|
||||
- navigation.sections
|
||||
- navigation.expand
|
||||
- navigation.indexes
|
||||
- content.code.copy
|
||||
- navigation.footer
|
||||
palette:
|
||||
- scheme: default
|
||||
primary: indigo
|
||||
accent: indigo
|
||||
toggle:
|
||||
icon: material/brightness-7
|
||||
name: Switch to dark mode
|
||||
- scheme: slate
|
||||
primary: black
|
||||
accent: black
|
||||
toggle:
|
||||
icon: material/brightness-4
|
||||
name: Switch to light mode
|
||||
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- pymdownx.details
|
||||
- pymdownx.superfences
|
||||
- attr_list
|
||||
- md_in_html
|
||||
- pymdownx.snippets:
|
||||
base_path: ["."]
|
||||
|
||||
nav:
|
||||
- Welcome: index.md
|
||||
- Installation:
|
||||
- installation/README.md
|
||||
- Docker Compose: installation/docker.md
|
||||
- Nix Flakes [Community]: installation/flakes.md
|
||||
- Usage:
|
||||
- Importing existing media: importing-existing-media.md
|
||||
- Configuration:
|
||||
- configuration/README.md
|
||||
- Backend: configuration/backend.md
|
||||
- Authentication: configuration/authentication.md
|
||||
- Database: configuration/database.md
|
||||
- Download Clients: configuration/download-clients.md
|
||||
- Indexers: configuration/indexers.md
|
||||
- Scoring Rulesets: configuration/scoring-rulesets.md
|
||||
- Notifications: configuration/notifications.md
|
||||
- Custom Libraries: configuration/custom-libraries.md
|
||||
- Logging: configuration/logging.md
|
||||
- Advanced Features:
|
||||
- qBittorrent Category: advanced-features/qbittorrent-category.md
|
||||
- URL Prefix: advanced-features/url-prefix.md
|
||||
- Metadata Provider Configuration: advanced-features/metadata-provider-configuration.md
|
||||
- Custom port: advanced-features/custom-port.md
|
||||
- Follow symlinks in frontend files: advanced-features/follow-symlinks-in-frontend-files.md
|
||||
- Disable startup ascii art: advanced-features/disable-startup-ascii-art.md
|
||||
- Troubleshooting: troubleshooting.md
|
||||
- API Reference: api-reference.md
|
||||
- Screenshots: screenshots.md
|
||||
- Contributing to MediaManager:
|
||||
- Developer Guide: contributing-to-mediamanager/developer-guide.md
|
||||
- Documentation: contributing-to-mediamanager/documentation.md
|
||||
|
||||
extra:
|
||||
version:
|
||||
provider: mike
|
||||