this post was submitted on 14 Mar 2025
1 points (100.0% liked)

Self-Hosted Alternatives to Popular Services

222 readers
1 users here now

A place to share, discuss, discover, assist with, gain assistance for, and critique self-hosted alternatives to our favorite web apps, web...

founded 2 years ago
MODERATORS
 
This is an automated archive made by the Lemmit Bot.

The original was posted on /r/selfhosted by /u/TheWicklowWolf on 2025-03-14 13:11:50+00:00.


What is it?

It’s a Media Discovery and Download Hub which acts as add-on or extension for the Arr stack and more, designed to manage and obtain media both manually and automatically. Think of it as a media manager, recommendation and helper app.

What's the Problem?

I've made a start, but for long-term stability and maintainability, the project needs more contributors. It's highly modular, with separate services, making it easy for new developers to jump in and focus on specific areas.

Where to Start?

I’ve set up the organization on GitHub at and I’m happy to add people to the the poject . This way, the project won’t be dependent on any one individual. With enough developers, it will help keep the project alive and ensure long-term stability.

Why?

I’ve already worked on these services individually (check out my other projects here) and I would prefer to bring them all into a unified project for better management and collaboration. This way, further development can be streamlined in one place, rather than scattered across multiple repos.

🌍 Proposed MediaWolf Features:

Books (Readarr & Anna’s Archive)

βœ… Missing List β†’ Read from Readarr, fetch missing books and auto-download via Anna’s Archive

βœ… Manual Search β†’ Search Anna’s Archive and download books (user selection and defined file structure)

βœ… Recommendations β†’ Generate book suggestions based on Readarr library (using a background tasks to scrape from Goodreads) - with options to add or dismiss suggestions including filters and sorting

Movies (Radarr & TMDB)

βœ… Recommendations β†’ Read Radarr library and suggest similar movies via TMDB (with options to add or dismiss suggestions including filters and sorting)

βœ… Manual Search β†’ Search via TMDB with option to add to Radarr

TV Shows (Sonarr & TMDB)

βœ… Recommendations β†’ Read Sonarr library and suggest similar shows via TMDB (with options to add or dismiss suggestions including filters and sorting)

βœ… Manual Search β†’ Search via TMDB with option to add to Sonarr

Music (Lidarr, LastFM, yt-dlp, Spotify)

βœ… Manual Search β†’ Search Spotify for music and download via spotDL (which uses yt-dlp)

βœ… Recommendations β†’ Generate artist recommendations from LastFM based on Lidarr library (with options to add or dismiss suggestions including filters and sorting)

βœ… Missing List β†’ Read Lidarr library, fetch missing albums and download via yt-dlp

Downloads (via yt-dlp)

βœ… Direct Download Page β†’ Input YouTube or Spotify link and download video/audio using spotDL or yt-dlp

Subscriptions (via spotdl and yt-dlp)

βœ… Schedule System β†’ Subscribe to YouTube Channels, Spotify or YouTube Playlists and download on a schedule

πŸ› οΈ Tech Stack Overview

| Layer | Technology | |


|


| | Frontend | Bootstrap (JS/HTML/CSS) | | Backend | Python with Flask | | Database | SQLite (SQLAlchemy) | | Scheduler | APScheduler (for cron-based scheduling) | | Downloader | spotdl and yt-dlp | | Containerization | Docker + Docker Compose |

πŸ“‚ Proposed Project Structure

MediaWolf/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ auth_api.py
β”‚   β”‚   β”œβ”€β”€ books_api.py
β”‚   β”‚   β”œβ”€β”€ downloads_api.py
β”‚   β”‚   β”œβ”€β”€ logs_api.py
β”‚   β”‚   β”œβ”€β”€ movies_api.py
β”‚   β”‚   β”œβ”€β”€ music_api.py
β”‚   β”‚   β”œβ”€β”€ settings_api.py
β”‚   β”‚   β”œβ”€β”€ shows_api.py
β”‚   β”‚   β”œβ”€β”€ subscriptions_api.py
β”‚   β”‚   └── tasks_api.py
β”‚   β”œβ”€β”€ db/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ database_handler.py
β”‚   β”‚   β”œβ”€β”€ music_db_handler.py
β”‚   β”‚   └── music_models.py
β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ config_services.py
β”‚   β”‚   β”œβ”€β”€ lastfm_services.py
β”‚   β”‚   β”œβ”€β”€ lidarr_services.py
β”‚   β”‚   β”œβ”€β”€ radarr_services.py
β”‚   β”‚   β”œβ”€β”€ readarr_services.py
β”‚   β”‚   β”œβ”€β”€ sonarr_services.py
β”‚   β”‚   β”œβ”€β”€ spotdl_download_services.py
β”‚   β”‚   β”œβ”€β”€ spotify_services.py
β”‚   β”‚   β”œβ”€β”€ subscription_services.py
β”‚   β”‚   β”œβ”€β”€ tasks.py
β”‚   β”‚   └── ytdlp_services.py
β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   └── string_cleaner.py
β”‚   β”œβ”€β”€ logger.py
β”‚   └── main.py
β”œβ”€β”€ docker/
β”‚   β”œβ”€β”€ .dockerignore
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── requirements.txt
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ static/
β”‚   β”‚   β”œβ”€β”€ base_script.js
β”‚   β”‚   β”œβ”€β”€ base_style.css
β”‚   β”‚   β”œβ”€β”€ book_script.js
β”‚   β”‚   β”œβ”€β”€ favicon.png
β”‚   β”‚   β”œβ”€β”€ lidarr.svg
β”‚   β”‚   β”œβ”€β”€ logo.png
β”‚   β”‚   β”œβ”€β”€ logs_script.js
β”‚   β”‚   β”œβ”€β”€ movies_script.js
β”‚   β”‚   β”œβ”€β”€ music_script.js
β”‚   β”‚   β”œβ”€β”€ music_style.css
β”‚   β”‚   β”œβ”€β”€ settings_script.js
β”‚   β”‚   β”œβ”€β”€ shows_script.js
β”‚   β”‚   β”œβ”€β”€ subscriptions_script.js
β”‚   β”‚   β”œβ”€β”€ tasks_script.js
β”‚   β”‚   β”œβ”€β”€ theme_script.js
β”‚   β”‚   └── yt_dlp.png
β”‚   └── templates/
β”‚       β”œβ”€β”€ base.html
β”‚       β”œβ”€β”€ books.html
β”‚       β”œβ”€β”€ downloads.html
β”‚       β”œβ”€β”€ login.html
β”‚       β”œβ”€β”€ logs.html
β”‚       β”œβ”€β”€ movies.html
β”‚       β”œβ”€β”€ music.html
β”‚       β”œβ”€β”€ settings.html
β”‚       β”œβ”€β”€ shows.html
β”‚       β”œβ”€β”€ subscriptions.html
β”‚       └── tasks.html
β”œβ”€β”€ docs/
β”‚   └── screenshot.png
└── README.md

Edit:

Edit: Anyone interested, create a PR for whatever section you want to take on...

no comments (yet)
sorted by: hot top controversial new old
there doesn't seem to be anything here