Script to add new series & movies to Sonarr/Radarr based on Trakt lists
1M+
Traktarr uses Trakt.tv to find shows and movies to add in to Sonarr and Radarr, respectively.
Types of Trakt lists supported:
Official Trakt Lists
Trending
Popular
Anticipated
Box Office
Most Watched
Most Played
Public Lists
Private Lists*
Watchlist
Custom List(s)
* Support for multiple (authenticated) users.
Click to enlarge.
Debian OS (can work in other operating systems as well).
Python 3.5+
Required Python modules.
Installs Traktarr to the system so that it can be ran with the traktarr command.
Clone the Traktarr repo.
sudo git clone https://github.com/l3uddz/traktarr /opt/traktarr
Fix permissions of the traktarr folder (replace user/group with your info; run id to check).
sudo chown -R user:group /opt/traktarr
Go into the traktarr folder.
cd /opt/traktarr
Install Python and PIP.
sudo apt-get install python3 python3-pip
Install the required python modules.
sudo python3 -m pip install -r requirements.txt
Create a shortcut for traktarr.
sudo ln -s /opt/traktarr/traktarr.py /usr/local/bin/traktarr
Generate a basic config.json file.
traktarr run
Configure the config.json file.
nano config.json
Create a Trakt application by going here
Enter a name for your application; for example traktarr
Enter urn:ietf:wg:oauth:2.0:oob in the Redirect uri field.
Click "SAVE APP".
Open the Traktarr configuration file config.json and insert your Trakt Client ID in the client_id and your Trakt Client Secret in the client_secret, like this:
"trakt": {
"client_id": "your_trakt_client_id",
"client_secret": "your_trakt_client_secret"
}
For each user you want to access the private lists for (i.e. watchlist and/or custom lists), you will need to to authenticate that user.
Repeat the following steps for every user you want to authenticate:
Run the following command:
traktarr trakt_authentication
You wil get the following prompt:
- We're talking to Trakt to get your verification code. Please wait a moment...
- Go to: https://trakt.tv/activate on any device and enter A0XXXXXX. We'll be polling Trakt every 5 seconds for a reply
Go to https://trakt.tv/activate.
Enter the code you see in your terminal.
Click Continue.
If you are not logged in to Trakt.tv, login now.
Click Accept.
You will get the message: "Woohoo! Your device is now connected and will automatically refresh in a few seconds.".
You've now authenticated the user.
You can repeat this process for as many users as you like.
{
"core": {
"debug": false
},
"automatic": {
"movies": {
"anticipated": 3,
"boxoffice": 10,
"interval": 24,
"popular": 3,
"trending": 2
},
"shows": {
"anticipated": 10,
"interval": 48,
"popular": 1,
"trending": 2
}
},
"filters": {
"movies": {
"disabled_for": [],
"allowed_countries": [
"us",
"gb",
"ca"
],
"allowed_languages": [
"en"
],
"blacklisted_genres": [
"documentary",
"music",
"animation"
],
"blacklisted_max_runtime": 0,
"blacklisted_min_runtime": 60,
"blacklisted_min_year": 2000,
"blacklisted_max_year": 2019,
"blacklisted_title_keywords": [
"untitled",
"barbie",
"ufc"
],
"blacklisted_tmdb_ids": [],
"rotten_tomatoes": ""
},
"shows": {
"disabled_for": [],
"allowed_countries": [
"us",
"gb",
"ca"
],
"allowed_languages": [],
"blacklisted_genres": [
"animation",
"game-show",
"talk-show",
"home-and-garden",
"children",
"reality",
"anime",
"news",
"documentary",
"special-interest"
],
"blacklisted_networks": [
"twitch",
"youtube",
"nickelodeon",
"hallmark",
"reelzchannel",
"disney",
"cnn",
"cbbc",
"the movie network",
"teletoon",
"cartoon network",
"espn",
"yahoo!",
"fox sports"
],
"blacklisted_max_runtime": 0,
"blacklisted_min_runtime": 15,
"blacklisted_min_year": 2000,
"blacklisted_max_year": 2019,
"blacklisted_title_keywords": [],
"blacklisted_tvdb_ids": []
}
},
"notifications": {
"pushover": {
"service": "pushover",
"app_token": "",
"user_token": "",
"priority": 0
},
"slack": {
"service": "slack",
"webhook_url": ""
},
"verbose": true
},
"radarr": {
"api_key": "",
"minimum_availability": "released",
"quality": "HD-1080p",
"root_folder": "/movies/",
"url": "http://localhost:7878/"
},
"sonarr": {
"api_key": "",
"language": "English",
"quality": "HD-1080p",
"root_folder": "/tv/",
"tags": [],
"url": "http://localhost:8989/"
},
"trakt": {
"client_id": "",
"client_secret": ""
},
"omdb": {
"api_key": ""
}
}
"core": {
"debug": false
},
debug - Toggle debug messages in the log. Default is false.
true, if you are having issues and want to diagnose why."automatic": {
"movies": {
"anticipated": 3,
"boxoffice": 10,
"interval": 24,
"popular": 3,
"trending": 0,
"watched": 2,
"played_all": 2,
"watchlist": {},
"lists": {},
},
"shows": {
"anticipated": 10,
"interval": 48,
"popular": 1,
"trending": 2,
"watched_monthly": 2,
"played": 2,
"watchlist": {},
"lists": {}
}
},
Used for automatic / scheduled Traktarr tasks.
Movies can be run on a separate schedule then from Shows.
Note: These settings are only needed if you plan to use Traktarr on a schedule (vs just using it as a CLI command only; see Usage).
Format:
Note: The number specified is the number of items that will be added into Radarr/Sonarr. It is not a Trakt list limit, i.e. this is not going to lookup Top X items.
interval - Specify how often (in hours) to run Traktarr task.
Setting interval to 0, will skip the schedule for that task.
For example, if you only want to add movies and not TV shows, you can set show's interval to 0.
anticipated - Trakt Anticipated List.
popular - Trakt Popular List.
trending - Trakt Trending List.
boxoffice - Trakt Box Office List. Movies only.
watched - Most watched (unique users) movies in the specified time period.
watched / watched_weekly - Most watched in the week.
watched_monthly - Most watched in the month.
watched_yearly - Most watched in the year.
watched_all - Most watched of all time.
played - Most played (a single user can watch multiple times) items in the specified time period.
played / played_weekly - Most played in the week.
played_monthly - Most played in the month.
played_yearly - Most played in the year.
played_all Most played of all time.
watchlist - Specify which watchlists to fetch (see explanation below).
lists - Specify which custom lists to fetch (see explanation below).
You can also schedule any number of public or private custom lists.
For both public and private lists you'll need the url to that list. When viewing the list on Trakt, simply copy the url from the address bar of the your browser.
Note: These are for non-watchlist lists. If you want to add a watchlist list, use the next section below.
Public lists can be added by specifying the url and the item limit like this:
"automatic": {
"movies": {
"lists": {
"https://trakt.tv/users/rkerwin/lists/top-100-movies": 10
}
},
"shows": {
"lists": {
"https://trakt.tv/users/claireaa/lists/top-100-tv-shows-of-all-time-ign": 10
}
}
},
Private lists can be added in two ways:
If there is only one authenticated user, you can add the private list just like any other public list:
"automatic": {
"movies": {
"lists": {
"https://trakt.tv/users/user/lists/my-private-movies-list": 10
}
},
"shows": {
"lists": {
"https://trakt.tv/users/user/lists/my-private-shows-list": 10
}
}
},
If there are multiple authenticated users you want to fetch the lists from, you'll need to specify the username under authenticate_as.
Note: The user should have access to the list (either own the list or a list that was shared to them by a friend).
"automatic": {
"movies": {
"lists": {
"https://trakt.tv/users/user/lists/my-private-movies-list": {
"authenticate_as": "user2",
"limit": 10
}
}
},
"shows": {
"lists": {
"https://trakt.tv/users/user/lists/my-private-shows-list": {
"authenticate_as": "user2",
"limit": 10
}
}
}
},
The watchlist task can be scheduled with a different item limit for every (authenticated) user.
So for every user, you will add: "username": limit to the watchlist key. For example:
"automatic": {
"movies": {
"watchlist": {
"user1": 10,
"user2": 5
}
},
"shows": {
"watchlist": {
"user1": 2,
"user3": 1
}
}
},
Use filters to specify the movie/shows's country of origin or blacklist (i.e. filter-out) certain keywords, genres, years, runtime, or specific movies/shows.
"movies": {
"disabled_for": [],
"allowed_countries": [
"us",
"gb",
"ca"
],
"allowed_languages": [],
"blacklisted_genres": [
"documentary",
"music",
"animation"
],
"blacklisted_max_runtime": 0,
"blacklisted_min_runtime": 60,
"blacklisted_min_year": 2000,
"blacklisted_max_year": 2019,
"blacklisted_title_keywords": [
"untitled",
"barbie"
],
"blacklisted_tmdb_ids": [],
"rotten_tomatoes": ""
},
disabled_for - Specify for which lists the blacklist is disabled for, when running in automatic mode.
This is similar to running --ignore-blacklist via the CLI command.
Example:
"disabled_for": [
"anticipated",
"watchlist:user1",
"list:http://url-to-list"
],
allowed_countries - Only add movies from these countries. Listed as two-letter country codes.
Special keywords:
Blank list (i.e. []) - Add movies from any country.
ignore (i.e. ["ignore"]) - Add movies from any country, including ones with no country specified.
allowed_languages - Only add movies with these languages. Listed as two-letter language codes.
Languages are in ISO 639-1 format (e.g. ja for Japanese.)
Special keywords:
Blank list (i.e. []) - Add movies with any language.
ignore (i.e. ["ignore"]) - Add movies with any language, including ones with no language specified.
blacklisted_genres - Blacklist certain genres.
For an updated list, visit here.
Special Keywords:
Blank list (i.e. []) - Add movies from any genre.
ignore (i.e. ["ignore"]) - Add movies from any genre, including ones with no genre specified.
blacklisted_min_runtime - Blacklist runtime duration shorter than specified time (in minutes).
blacklisted_max_runtime - Blacklist runtime duration longer than specified time (in minutes).
blacklisted_min_runtime or else it will be ignored.blacklisted_min_year - Blacklist release dates before specified year. This can be a 4 digit year, 0, or -<number of years to go back> format.
If 0, blacklist movies that came out before the current year.
If -10, blacklist movies that came out 10 years before the current year.
blacklisted_max_year - Blacklist release dates after specified year. This can be a 4 digit year, 0, or +<number of years to go forward> format.
If 0, blacklist movies that are coming out after the current year.
If +1, blacklist movies that are coming out after 1 year from current year.
blacklisted_title_keywords - Blacklist certain words in titles.
blacklisted_tmdb_ids - Blacklist certain movies with their TMDB IDs.
Example:
"blacklisted_tmdb_ids": [
140607,
181808
],
rotten_tomatoes - Only add movies that are equal to or above this Rotten Tomatoes score. Requires an OMDb API Key (see below).
"shows": {
"allowed_countries": [
"us",
"gb",
"ca"
],
"allowed_languages": [],
"blacklisted_genres": [
"animation",
"game-show",
"talk-show",
"home-and-garden",
"children",
"reality",
"anime",
"news",
"documentary",
"special-interest"
],
"blacklisted_networks": [
"twitch",
"youtube",
"nickelodeon",
"hallmark",
"reelzchannel",
"disney",
"cnn",
"cbbc",
"the movie network",
"teletoon",
"cartoon network",
"espn",
"yahoo!",
"fox sports"
],
"blacklisted_max_runtime": 0,
"blacklisted_min_runtime": 15,
"blacklisted_min_year": 2000,
"blacklisted_max_year": 2019,
"blacklisted_title_keywords": [],
"blacklisted_tvdb_ids": []
}
disabled_for - Specify for which lists the blacklist is disabled for, when running in automatic mode.
This is similar to running --ignore-blacklist via the CLI command.
Example:
"disabled_for": [
"anticipated",
"watchlist:user1",
"list:http://url-to-list"
],
allowed_countries - Only add shows from these countries. Listed as two-letter country codes.
Special keywords:
Blank list (i.e. []) - Add shows from any country.
ignore (i.e. ["ignore"]) - Add shows from any country, including ones with no country specified.
allowed_languages - Only add shows with these languages.
Languages are in ISO 639-1 format (e.g. ja for Japanese.)
Special keywords:
Blank list (i.e. []) - Add shows with any language.
ignore (i.e. ["ignore"]) - Add shows with any language, including ones with no language specified.
blacklisted_genres - Blacklist certain genres.
For an updated list, visit here.
Special Keywords:
Blank list (i.e. []) - Add shows from any genre.
ignore (i.e. ["ignore"]) - Add shows from any genre, including ones with no genre specified.
blacklisted_networks - Blacklist certain network.
blacklisted_min_runtime - Blacklist runtime duration shorter than specified time (in minutes).
blacklisted_max_runtime - Blacklist runtime duration longer than specified time (in minutes).
blacklisted_min_runtime or else it will be ignored.blacklisted_min_year - Blacklist release dates before specified year. This can be a 4 digit year, 0, or -<number of years to go back> format.
If 0, blacklist shows that came out before the current year.
If -10, blacklist shows that came out 10 years before the current year.
blacklisted_max_year - Blacklist release dates after specified year. This can be a 4 digit year, 0, or +<number of years to go forward> format.
If 0, blacklist shows that are coming out after the current year.
If +1, blacklist shows that are coming out after 1 year from current year.
blacklisted_title_keywords - Blacklist certain words in titles.
blacklisted_tvdb_ids - Blacklist certain shows with their TVDB IDs.
Example:
"blacklisted_tvdb_ids": [
79274,
85287,
71256,
194751,
76733,
336238
],
"notifications": {
"Apprise": {
"service": "apprise",
"url": "",
"title": ""
},
"verbose": false
},
Notification alerts for Traktarr tasks.
For auto (i.e. scheduled) runs, notifications are enabled automatically when notification services are listed in this section.
For manual (i.e. CLI) commands, you need to add the --notifications flag.
Supported services:
apprisepushoverslackNote: The key name can be anything, but the service key must be must be the exact service name (e.g. pushover). See below for example.
"notifications": {
"anyname": {
"service": "pushover",
}
},
verbose - Toggle detailed notifications.
Default is true.
Set to false if you want to reduce the amount of detailed notifications (e.g. just the total vs the names of the movies/shows added).
"notifications": {
"verbose": true
},
"notifications": {
"Apprise": {
"service": "apprise",
"url": "",
"title": ""
},
"verbose": false
},
url - Apprise service URL (see here).
title - Notification Title.
Optional.
Default is Traktarr.
"notifications": {
"pushover": {
"service": "pushover",
"app_token": "",
"user_token": "",
"priority": 0
},
"verbose": false
},
app_token - App Token from Pushover.net.
user_token - User Token from Pushover.net.
priority - Priority of the notifications.
Optional.
Choices are: -2, -1, 0, 1, 2.
Values are not quoted.
Default is 0.
"notifications": {
"slack": {
"service": "slack",
"webhook_url": "",
"channel": "",
"sender_name": "Traktarr",
"sender_icon": ":movie_camera:"
},
"verbose": false
},
webhook_url - Webhook URL.
channel - Slack channel to send the notifications to.
Optional.
Default is blank.
sender_name - Sender's name for the notifications.
Optional.
Default is Traktarr.
sender_icon - Icon to use for the notifications.
Optional.
Default is :movie_camera:
Radarr configuration.
"radarr": {
"api_key": "",
"minimum_availability": "released",
"quality": "HD-1080p",
"root_folder": "/movies/",
"url": "http://localhost:7878"
},
api_key - Radarr's API Key.
quality - Quality Profile that movies are assigned to.
minimum_availability - The minimum availability the movies are set to.
Choices are announced, in_cinemas, released (Physical/Web), or predb.
Default is released (Physical/Web).
root_folder - Root folder for movies.
url - Radarr's URL.
Sonarr configuration.
"sonarr": {
"api_key": "",
"language": "English",
"quality": "HD-1080p",
"root_folder": "/tv/",
"tags": [],
"url": "http://localhost:8989"
},
api_key - Sonarr's API Key.
language - Language Profile that TV shows are assigned to. Only applies to Sonarr v3.
quality - Quality Profile that TV shows are assigned to.
root_folder - Root folder for TV shows.
tags - Assign tags to shows. Tags need to be created in Sonarr first.
Examples:
"tags": ["anime"]
"tags": ["anime", "jap"]
"tags": [
"anime",
"jap"
]
url - Sonarr's URL.
Trakt Authentication info:
"trakt": {
"client_id": "",
"client_secret": ""
}
client_id - Your Trakt API Key (Client ID).
client_secret - Your Trakt Secret Key (Client Secret).
OMDb Authentication info.
"omdb": {
"api_key":""
}
api_key - Your OMDb API Key.
This is only needed if you wish to use a minimum Rotten Tomatoes score to filter out movies.
Use rotten_tomatoes in config for automatic scheduling or --rotten_tomatoes as an argument for CLI.
To have Traktarr get Movies and Shows for you automatically, on set interval, do the following:
sudo cp /opt/traktarr/systemd/traktarr.service /etc/systemd/system/
sudo nano /etc/systemd/system/traktarr.service and edit user/group to match yours' (run id to check).
sudo systemctl daemon-reload
sudo systemctl enable traktarr.service
sudo systemctl start traktarr.service
You can customize how the scheduled Traktarr is ran by editing the traktarr.service file and adding any of the following options:
* Remember, othe
Content type
Image
Digest
Size
41.5 MB
Last updated
about 5 years ago
docker pull cloudb0x/traktarr