Effortlessly request recommended movies, TV shows and anime to Jellyseer/Overseer based on your recently watched content on Jellyfin, Plex or Emby—let SuggestArr handle it all automatically, keeping your library fresh with new and exciting content!
1,311
stars
820
commits
Python
primary language
Sep 8, 2026
updated
SuggestArr is a project designed to automate media content recommendations and download requests based on user activity in media servers like Jellyfin, Plex, and now Emby. It retrieves recently watched content, searches for similar titles using the TMDb API, and sends automated download requests to Seer.
New jobs follow the global Approve requests before sending them to Seer setting, disabled by default under Advanced. Each job can inherit that setting or override it to always approve or always send automatically. Held results appear on the Requests page, where the job owner or an administrator can send them to Seer, reject them, or blacklist them globally.
The global Request Workflow settings can also pause a job while its SuggestArr suggestions await review and automatically reject suggestions left pending for a configured number of days. The pause behavior can be overridden per job.
INFO, ERROR, DEBUG).You can run the project using Docker Compose for easy setup and execution.
Images are also available from GitHub Container Registry as ghcr.io/giuseppe99barchetta/suggestarr:latest.
services:
suggestarr:
image: ciuse99/suggestarr:latest
container_name: SuggestArr
restart: always
ports:
- "${SUGGESTARR_PORT:-5000}:${SUGGESTARR_PORT:-5000}"
volumes:
- ./config_files:/app/config/config_files
environment:
# Optional: Only needed if something goes wrong and you need to inspect deeper
- LOG_LEVEL=${LOG_LEVEL:-info}
# Optional: Customize the port (defaults to 5000 if not set)
- SUGGESTARR_PORT=${SUGGESTARR_PORT:-5000}
To start the container with Docker Compose:
docker-compose up
Access the web interface at: http://localhost:5000 (or your custom port if configured with SUGGESTARR_PORT). Use this interface to configure the application, select your media service, and manage cron schedules.
Make sure your environment is set up correctly and that the application is running to access the web interface.
If you'd like to use a specific Seer user to make media requests, follow these steps:
Note: Currently, only local Seer users are supported.
SuggestArr can enrich recommendations with each user's own Trakt watch history. Trakt is optional: media-server history still works without it.
For admins, the same profile panel is available under Users. Trakt links are tied to the user's linked Plex, Jellyfin, or Emby media profile, so users should link their media-server account first.
SuggestArr includes two safety tools for running automation without flooding Seer or keeping unwanted media forever.
Each job has a Pause while Seer requests are pending option in its schedule settings.
When enabled, SuggestArr checks Seer before running that job. If Seer has requests still awaiting approval or denial, the job is skipped and logged as paused/skipped. This applies to scheduled runs, single job runs, and force-run-all.
Recommendation and Trakt Recommendation jobs can also enable Pause if suggestions remain unwatched. Movie and TV activity is tracked separately per linked media user. Watching a requested movie or one episode of a requested show starts a fresh cycle; only scheduled runs are paused.
Use this when Seer approvals are part of your workflow and you want new automation runs to wait until the previous batch has been reviewed.
Cleanup Automation is available under Advanced -> Cleanup Automation.
It looks at requests created by SuggestArr, waits for the configured grace period, checks whether the item is favorited in Plex, Jellyfin, or Emby, and then:
Cleanup is off by default and starts safely in dry-run mode. Always run dry-run first and review the audit log before enabling real deletions.
SuggestArr includes an optional AI recommendation engine that analyzes your watch history and suggests titles that match your taste, with a short explanation for each pick.
Recent watches are treated as neutral viewing context, not automatic proof that a user liked them. When TMDb metadata is available, the AI also receives each item's media type and genres.
The engine works with any OpenAI-compatible API, so you can use a cloud provider or a local model running on your own machine.
If the LLM is unavailable or returns no results, SuggestArr falls back to the standard TMDb-based recommendation algorithm transparently.
| Provider | API Key | Base URL | Example model |
|---|---|---|---|
| OpenAI | Required (sk-proj-...) | (leave blank) | gpt-4o-mini |
| Ollama (local) | Not required | http://localhost:11434/v1 | mistral, llama3 |
| OpenRouter | Required (sk-or-v1-...) | https://openrouter.ai/api/v1 | meta-llama/llama-3-8b-instruct |
| OrcaRouter | Required (sk-orca-...) | https://api.orcarouter.ai/v1 | openai/gpt-5.5 |
| LiteLLM Proxy | Depends on config | http://<your-proxy>:4000 | Depends on config |
Note for Ollama users: make sure Ollama is running and the model is pulled (ollama pull mistral) before saving. The API Key field can be left blank — SuggestArr will use a placeholder automatically.
The Temperature field defaults to legacy, preserving the existing values: 0.7 for scheduled recommendations and 0.8 for AI Search. Clear the field and save to omit temperature from LLM requests, which is useful for models that reject it; enter a value from 0 to 2 to override both flows.
Reasoning effort is optional (low, medium, or high) and is sent only for direct OpenAI GPT-5 and o-series models. It is provider/model dependent, so other OpenAI-compatible endpoints leave it out.
services:
suggestarr:
image: ciuse99/suggestarr:latest
container_name: SuggestArr
restart: always
ports:
- "5000:5000"
volumes:
- ./config_files:/app/config/config_files
ollama:
image: ollama/ollama
container_name: ollama
restart: always
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
volumes:
ollama_data:
After starting both containers, pull your preferred model:
docker exec -it ollama ollama pull mistral
Then in SuggestArr Advanced settings set:
http://ollama:11434/v1mistralSuggestArr includes an AI Search tab in the dashboard that lets you find movies and TV shows using plain text, no browsing required.
Type a natural-language description of what you feel like watching. The LLM interprets your query (genres, era, language, rating threshold, mood…) and translates it into structured TMDB filters. Results are ranked and enriched with an AI-generated rationale explaining why each title was picked for you.
Examples of queries you can use:
AI Search requires an LLM to be configured (same setup as AI-Powered Recommendations):
AI Search is independent of the automated recommendations run — it is triggered manually from the dashboard and does not affect cron-based automation.
For Docker, Unraid, source install, reverse proxy, backup, and recommended configuration instructions, see the Installation Guide.
External integrations use the stable public API at /api/v1; dashboard
endpoints under /api/* are internal. The interactive Swagger UI is served by
the backend at http://localhost:5000/docs (or
http://localhost:5000/<SUBPATH>/docs when SUBPATH is configured). The
OpenAPI document is also available as
/api/v1/openapi.json and /api/v1/openapi.yaml.
See the Public API v1 guide for authentication, addresses, and usage details.
If you enjoy SuggestArr, consider making a donation to support its continued development and help keep the project running at its best:
Every contribution, no matter the size, is greatly appreciated. Thank you for supporting SuggestArr!
Feel free to join our Discord community to share ideas, ask questions, or get help with SuggestArr: Join here.
Contributions are highly welcome! Feel free to open issues, submit pull requests, or provide any feedback that can improve the project. Whether you're fixing bugs, improving documentation, or adding new features, all contributions are greatly appreciated.
This project is licensed under the MIT License.
650 commits
55 commits
50 commits
29 commits
Python
60.9%
Vue
28.7%
CSS
7.4%
JavaScript
2.9%
Effortlessly request recommended movies, TV shows and anime to Jellyseer/Overseer based on your recently watched content on Jellyfin, Plex or Emby—let SuggestArr handle it all automatically, keeping your library fresh with new and exciting content!
1,311
stars
820
commits
Python
primary language
Sep 8, 2026
updated
SuggestArr is a project designed to automate media content recommendations and download requests based on user activity in media servers like Jellyfin, Plex, and now Emby. It retrieves recently watched content, searches for similar titles using the TMDb API, and sends automated download requests to Seer.
New jobs follow the global Approve requests before sending them to Seer setting, disabled by default under Advanced. Each job can inherit that setting or override it to always approve or always send automatically. Held results appear on the Requests page, where the job owner or an administrator can send them to Seer, reject them, or blacklist them globally.
The global Request Workflow settings can also pause a job while its SuggestArr suggestions await review and automatically reject suggestions left pending for a configured number of days. The pause behavior can be overridden per job.
INFO, ERROR, DEBUG).You can run the project using Docker Compose for easy setup and execution.
Images are also available from GitHub Container Registry as ghcr.io/giuseppe99barchetta/suggestarr:latest.
services:
suggestarr:
image: ciuse99/suggestarr:latest
container_name: SuggestArr
restart: always
ports:
- "${SUGGESTARR_PORT:-5000}:${SUGGESTARR_PORT:-5000}"
volumes:
- ./config_files:/app/config/config_files
environment:
# Optional: Only needed if something goes wrong and you need to inspect deeper
- LOG_LEVEL=${LOG_LEVEL:-info}
# Optional: Customize the port (defaults to 5000 if not set)
- SUGGESTARR_PORT=${SUGGESTARR_PORT:-5000}
To start the container with Docker Compose:
docker-compose up
Access the web interface at: http://localhost:5000 (or your custom port if configured with SUGGESTARR_PORT). Use this interface to configure the application, select your media service, and manage cron schedules.
Make sure your environment is set up correctly and that the application is running to access the web interface.
If you'd like to use a specific Seer user to make media requests, follow these steps:
Note: Currently, only local Seer users are supported.
SuggestArr can enrich recommendations with each user's own Trakt watch history. Trakt is optional: media-server history still works without it.
For admins, the same profile panel is available under Users. Trakt links are tied to the user's linked Plex, Jellyfin, or Emby media profile, so users should link their media-server account first.
SuggestArr includes two safety tools for running automation without flooding Seer or keeping unwanted media forever.
Each job has a Pause while Seer requests are pending option in its schedule settings.
When enabled, SuggestArr checks Seer before running that job. If Seer has requests still awaiting approval or denial, the job is skipped and logged as paused/skipped. This applies to scheduled runs, single job runs, and force-run-all.
Recommendation and Trakt Recommendation jobs can also enable Pause if suggestions remain unwatched. Movie and TV activity is tracked separately per linked media user. Watching a requested movie or one episode of a requested show starts a fresh cycle; only scheduled runs are paused.
Use this when Seer approvals are part of your workflow and you want new automation runs to wait until the previous batch has been reviewed.
Cleanup Automation is available under Advanced -> Cleanup Automation.
It looks at requests created by SuggestArr, waits for the configured grace period, checks whether the item is favorited in Plex, Jellyfin, or Emby, and then:
Cleanup is off by default and starts safely in dry-run mode. Always run dry-run first and review the audit log before enabling real deletions.
SuggestArr includes an optional AI recommendation engine that analyzes your watch history and suggests titles that match your taste, with a short explanation for each pick.
Recent watches are treated as neutral viewing context, not automatic proof that a user liked them. When TMDb metadata is available, the AI also receives each item's media type and genres.
The engine works with any OpenAI-compatible API, so you can use a cloud provider or a local model running on your own machine.
If the LLM is unavailable or returns no results, SuggestArr falls back to the standard TMDb-based recommendation algorithm transparently.
| Provider | API Key | Base URL | Example model |
|---|---|---|---|
| OpenAI | Required (sk-proj-...) | (leave blank) | gpt-4o-mini |
| Ollama (local) | Not required | http://localhost:11434/v1 | mistral, llama3 |
| OpenRouter | Required (sk-or-v1-...) | https://openrouter.ai/api/v1 | meta-llama/llama-3-8b-instruct |
| OrcaRouter | Required (sk-orca-...) | https://api.orcarouter.ai/v1 | openai/gpt-5.5 |
| LiteLLM Proxy | Depends on config | http://<your-proxy>:4000 | Depends on config |
Note for Ollama users: make sure Ollama is running and the model is pulled (ollama pull mistral) before saving. The API Key field can be left blank — SuggestArr will use a placeholder automatically.
The Temperature field defaults to legacy, preserving the existing values: 0.7 for scheduled recommendations and 0.8 for AI Search. Clear the field and save to omit temperature from LLM requests, which is useful for models that reject it; enter a value from 0 to 2 to override both flows.
Reasoning effort is optional (low, medium, or high) and is sent only for direct OpenAI GPT-5 and o-series models. It is provider/model dependent, so other OpenAI-compatible endpoints leave it out.
services:
suggestarr:
image: ciuse99/suggestarr:latest
container_name: SuggestArr
restart: always
ports:
- "5000:5000"
volumes:
- ./config_files:/app/config/config_files
ollama:
image: ollama/ollama
container_name: ollama
restart: always
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
volumes:
ollama_data:
After starting both containers, pull your preferred model:
docker exec -it ollama ollama pull mistral
Then in SuggestArr Advanced settings set:
http://ollama:11434/v1mistralSuggestArr includes an AI Search tab in the dashboard that lets you find movies and TV shows using plain text, no browsing required.
Type a natural-language description of what you feel like watching. The LLM interprets your query (genres, era, language, rating threshold, mood…) and translates it into structured TMDB filters. Results are ranked and enriched with an AI-generated rationale explaining why each title was picked for you.
Examples of queries you can use:
AI Search requires an LLM to be configured (same setup as AI-Powered Recommendations):
AI Search is independent of the automated recommendations run — it is triggered manually from the dashboard and does not affect cron-based automation.
For Docker, Unraid, source install, reverse proxy, backup, and recommended configuration instructions, see the Installation Guide.
External integrations use the stable public API at /api/v1; dashboard
endpoints under /api/* are internal. The interactive Swagger UI is served by
the backend at http://localhost:5000/docs (or
http://localhost:5000/<SUBPATH>/docs when SUBPATH is configured). The
OpenAPI document is also available as
/api/v1/openapi.json and /api/v1/openapi.yaml.
See the Public API v1 guide for authentication, addresses, and usage details.
If you enjoy SuggestArr, consider making a donation to support its continued development and help keep the project running at its best:
Every contribution, no matter the size, is greatly appreciated. Thank you for supporting SuggestArr!
Feel free to join our Discord community to share ideas, ask questions, or get help with SuggestArr: Join here.
Contributions are highly welcome! Feel free to open issues, submit pull requests, or provide any feedback that can improve the project. Whether you're fixing bugs, improving documentation, or adding new features, all contributions are greatly appreciated.
This project is licensed under the MIT License.
650 commits
55 commits
50 commits
29 commits
Python
60.9%
Vue
28.7%
CSS
7.4%
JavaScript
2.9%