Just planning upgrading? See the upgrade guide first!
This page contains information about configuration file format changes, as well as FlexGet behavioral changes that may affect the user. If your configuration file does not pass flexget check
after upgrading, this page should contain instructions detailing what you need to change.
Starting from version 2.0.0 we are using semantic versioning, in the form that any increase in the second digit means that configuration is not necessarily backwards compatible and may need to be updated. Therefore this page is generally only updated after each 2.x.0 release.
Telegram plugin now requires python-telegram-bot v21.9 or later. pip install --upgrade python-telegram-bot
You can specify chat_id
directly in the configuration file.
socks_proxy
option now uses standard socks5://user:pass@host:port
.
Python 3.8 has been EoL since June. Support for it has now been dropped. You'll need to install Flexget with Python 3.9+ in order to upgrade.
The parse_mode: markdown
setting was updated to use MarkdownV2.
The legacy parse mode was moved to parse_mode: markdown_legacy
The transmission (and from_transmission) plugins now require transmission-rpc version 7.0.3 or greater. Run pip install --upgrade transmission-rpc
from the environment where flexget is installed to upgrade.
The entry fields and template system have been upgraded to use timezone aware datetimes. We have done our best to make this transparent in most cases, but if you are doing date comparison with the if
plugin, or age
plugin, you may need to check everything is working how you intended. Most plugins have been upgraded to provide entry fields with datetimes in the proper timezone, but if there are any without a timezone, when compared with a time including a timezone, it will be assumed to be in the same timezone. Some other changes and notes to be aware of:
transmission_date_done < somedate.subtract(days=10)
, Something was released {{rss_pubdate.diff_for_humans()}}
).date()
timedelta
helper in templates has been converted to be a pendulum duration
, and an alias duration
has been added.Help reporting any bugs, or upgrading any plugins still using naive times would be much appreciated. More details in the PR
Python 3.7 has been EoL since June. Support for it has now been dropped. You'll need to install Flexget with Python 3.8+ in order to upgrade.
The passthepopcorn plugin has been fixed, but configs need to be updated to use the apiuser
and apikey
configuration rather than username
and password
.
The tracking
option for series has been removed, and will need to be removed from your config if you specified it. It often created more problems than it solved. There have been improvements to automatically set a reasonable begin episode for series if one was not already set, but you should set it manually to be completele sure nothing from the past will be needlessly downloaded.
The seen plugin CLI has been altered to make the --tasks
parameter more consistent. The argument has now been renamed to --task
, and if you'd like to operate on more than one task at a time, you can use wildcards in the argument, or specify --task
more than once.
All measurements of file size have been standardized to use bytes as the unit. This should be transparent for most users. Your config will need to be updated if you were using the content_size
entry field with the if
plugin, in a jinja template, or in a custom plugin, you will need to adjust since it is now measured in bytes rather than mebibytes.
In addition, if you were using a plugin that takes a filesize in the config, you must now be more explicit with the size, e.g. 1 GiB
, rather than 1G
More info in the PR
The morethantv plugin categories have been updated to match changes made at the site. They will need to be updated in your config to use the new categories.
The transmission (and from_transmission) plugins now require transmission-rpc version 4.1.4 or greater. Run pip install --upgrade transmission-rpc
from the environment where flexget is installed to upgrade.
Support for python 3.6 has been dropped. Install FlexGet using python 3.7 or newer to continue upgrading.
The official docker image is changing the default config bindmount from /root/.flexget
to /config
to allow running a container as a non-root user. Please change your -v
path or volumes
in docker-compose.yml
if using docker compose.
from_transmission
was setting entry fields with timezone aware datetimes depending on what version was installed. If you were using any if
statements comparing to these dates with now.astimezone()
you must now remove the .astimezone()
if:
# before
- transmission_date_added > now.astimezone() - timedelta(hours=3): accept
# after
- transmission_date_added > now - timedelta(hours=3): accept
imdb_list
plugin has been changed to use cookies to avoid issues with captcha. See updatad wiki here Sorry, we missed this breaking change in the version system, we bumped to version 3.2 to retroactively document this breaking change.
Transmission plugin now uses transmission-rpc. pip install transmission-rpc
IRC plugin now requires irc-bot 1.0.35 or later. pip install --ugprade irc-bot
Python 2 support is dropped as Python 2 reaches EOL in Jan 1st 2020. The minimal python version is now Python 3.6. We highly recommend upgrading your python if you're still using Python 2. Note that if you're already running Flexget on python 3.6 and higher, there should be no breaking changes in this version.
Added new limit plugin which replaces limit option from older plugins (ie. trakt_list). Some are still backwards compatible.
The clean_transmission
plugin has been deprecated. The transmission plugin has gained the ability to remove torrents, which should be used in place of clean_transmission
. A recipe detailing how to do this can be found here. (The deluge plugin has gained the same ability now too.)
clean_transmission
is still available to use at the moment, but some of its internals had to be tweaked. If you do not immediately replace this plugin, make sure to do a --test
run to ensure it still causes the behavior you expect.
The onlycomplete
option default has been changed from yes
to no
in addition to being renamed only_complete
. By default all entries loaded in transmission will be provided now.
from_transmission
also provides more information from transmission with entry fields prefixed with transmission_
.
All multi-word options have been changed to have an underscore for consistency and readability. In addition, the spelling of 'honour' has been changed to match the spelling in transmission.
old name | new name |
---|---|
maxupspeed | max_up_speed |
maxdownspeed | max_down_speed |
maxconnections | max_connections |
addpaused | add_paused |
bandwidthpriority | bandwidth_priority |
honourlimits | honor_limits * note the spelling change |
The keys
option has been removed. from_deluge now provides all fields from deluge with the deluge_
prefix. Field names may vary slightly between deluge versions. Do a test run of your task to verify field names after the update:
flexget --test execute --tasks my_from_deluge_task --dump
This will show all available field names and values which you can use to update your config appropriately.
All multi-word options have been changed to have an underscore for consistency and readability. movedone
was changed to move_completed_path
to align with deluge naming.
old name | new name |
---|---|
movedone | move_completed_path |
queuetotop | queue_to_top |
automanaged | auto_managed |
maxupspeed | max_up_speed |
maxdownspeed | max_down_speed |
maxconnections | max_connections |
maxupslots | max_up_slots |
removeatratio | remove_at_ratio |
addpaused | add_paused |
Internal sorting of entries has been removed from both the discover and series plugins.
Formerly, the series plugin sorted by quality, and when multiple copies of an episode were available on a given run of a task, the highest quality would be chosen. Now that this internal sorting has been removed, the sort_by plugin can be used in the task to prioritize based on quality, or other metrics. To emulate the old behavior the following can be added to the task:
sort_by:
field: quality
reverse: yes
The discover plugin used to sort all results based upon torrent availability (for search plugins on torrent sites) before adding them to the task. Entries are now released in whatever order the search plugin returns. Torrent search plugins now populate the torrent_availability
field which can be used if you wish emulate the old behavior.
sort_by:
field: torrent_availability
reverse: yes
If you are using Python 3.7, and you have escape sequences in your regex replacements in manipulate
plugin, they will need to be double escaped now.
The deluge
plugin has been changed to use the deluge-client library. You will need to pip install deluge-client
if you are using this plugin.
The variables
plugin has been changed to allow arbitrary sections of config to be substituted. This means it can be used in config sections which require numbers, or even bigger config sections such as a list or dictionary. If you were relying on variable replacement always producing a string, and get config errors after the upgrade, you may need to add extra quotes to the replacement with this version. e.g. some_setting: "'{? a_variable ?}'"
The form
plugin has been changed to use mechanicalsoup rather than mechanize. If you are using this plugin, you'll have to pip install mechanicalsoup
. It is now python 3 compatible and respects the headers
plugin.
irc_daemon
plugins task_re
option has been modified to treat tasks with more than one pattern defined as an AND condition rather than OR. This requires modification of existing configurations to the new structure. More information with an example is available in the updated irc_daemon
plugin documentation.fuzer
search plugin was changed to accomodate site's usage of recaptcha.Parsing has been greatly simplified. The old interface was difficult to maintain. This also means that the Guessit parser now supports ver. 2.1.4+. Due to the simplification, a lot of the specialized fields such as is_3d
are no longer available. If you feel that a particular value is missing, open an issue on our Github.
If you do not make use of Guessit-specific fields, no changes to your config are required.
NOTE: There are currently a few bugs in Guessit that we have no control over. So if you're parsing anime, it may be better to use the internal parser for now. See issue #533 and issue #532.
The following is a list of search plugins that have been removed due to site closures. Any site claiming to be a direct successor/re-opening cannot be trusted.
The subliminal plugin has been changed to reject entries for which it cannot find all requested subtitle languages. Before this change, it would fail entries, but it was deemed counterintuitive.
In addition, single mode will now ignore existing subtitles if the languages do not match. This is the same behaviour as running subliminal manually via CLI.
hostname:port/
instead of hostname:port/ui
base_url
for web serverBackwards compatibility with old system has been taken out; it wasn't working quite properly anyway. You cannot use the individual notifiers at task level anymore. You must use the notify plugin, which is also where message content is now configured.
notify_task
, notify_entries
, notify_abort
:
notify
plugin, with subkeys task
, entries
, and abort
subkeysto
option:
to
key. This has been renamed to via
.file_template
:
template
notify_osd
:
toast
(and preliminary Windows support added)If you use any of the following plugins, you will most likely have to update your config. See their individual wiki pages for the new config format, as well as the notify
plugin.
Examples of new notifier config:
# Similar to old email config, one message per task run (when there are results)
notify:
task:
template: html # Optional, if you want html instead of plain text
via:
- email:
to: blah@blah
# other email opts here
# For push messaging services, one message per accepted entry
notify:
entries:
title: "custom jinja {{title}}" # Optional
message: "custom jinja message {{series_name}}" # Optional
via:
- pushbullet:
opts: here
secrets
:variables
to reflect the more general usage pattern it has gotten.# Before
secrets: mysecrets.yml
tasks:
a:
rss: "{{ secrets.myrss }}"
# After
variables: mysecrets.yml
tasks:
a:
rss: "{? myrss ?}"
If you use notepad++ or another editor capable of doing search and replace with regular expressions, the following may be sufficient (note: only tested in notepad++):find: \{\{\s?secrets\.(.*?)\s?\}\}
replace: \{\? \1 \?\}
if
:The below information is kept for reference, but the notification system was changed again in 2.9.0!
notify
plugin.notify_crash
to notify_abort.file_templates
usage slightly.This information is kept for reference, but the notification system was changed again in 2.9.0!
email
:
whatcd
:
move
, copy
:
filename
to rename
since it caused issues with filesystem plugin.flexget daemon reload
has been renamed to flexget daemon reload-config
to avoid confusion.flexget daemon enable-autoreload
and flexget daemon disable-autoreload
have been removed as their use was limited and ill-conceived.move
, delete
, copy
:
along
has been greatly simplified and includes similarly named files with specified extensions -- regex/glob no longer supported.tmdb_released
web_server:
bind: 0.0.0.0 # IP V4
port: 3539 # Valid port number
ssl_certificate: '/etc/ssl/private/myCert.pem' # Path to certificate file
ssl_private_key: '/etc/ssl/private/myKey.key' # Path to private key file
web_ui: yes # Web-UI can optionally be disabeled, only API will run
Or:web_server: yes
That will enable the API and Web-UI on 0.0.0.0 with the port 5050 by default.web_server: 8080
API is now always enabled when running the web server, UI is optional (enabled by default).discover
:
release_estimations
option now defaults to strict
instead of loose
, meaning anything with no release date or one that lies in the future will not be included in the searchmovie_queue
:
movie_list
instead.imdb_required
:
--porcelain
works slightly different now. See relevant plugin Wiki for details.trakt
:
flexget trakt show
has been renamed to flexget trakt list
subtitle_queue
, torrentz
, rutracker
, newzleech
, publichd
, bt-chat
, btjunkie
, isohunt
, redskunk
, stmusic
:
pip install irc_bot
thetvdb_add
, thetvdb_remove
, thetvdb_favorites
:
kat
:
uoccin
:
move
, copy
, delete
along
setting in plugins. See their wiki entries for details.download
, move
:
output
attribute when using the plugins. Use location
instead.Several breaking changes
As an effort to provide more consistent configuration and better user experience, several changes are presented with this version:
list_accept
, list_reject
, list_queue
:
emit_series
:
sonarr_emit
:
trakt_emit
:
send_telegram
:
path_select
:
emit_digest
:
emit_uoccin
:
dynamic_imdb
:
trakt_add
, trakt_remove
:
list_add
, list_remove
and trakt_list
Major Flexget Change
Version 2.0.0 of FlexGet introduces Python 3.x support. This was a huge refactor and has been tested to the best of our abilities. With such a huge change like this we expect there to be some bugs, especially with third party plugins.
For more information on py2/3 code visit Developers.
Please log bugs in GitHub.
Series CLI Changes:
series forget
now also fires a forget
event which for now removes all the relevant downloaded release from seen
plugin as well. This is relevant both for entire series and when using identifer.series remove
was added which does what series forget
used to do, I.E. remove show/episode only from series DBremove_seen
parameter name was changed to forget
in all the DELETE endpoints.series_forget
plugin name to series_remove
List interface:
A new convention of plugins that allows usage as input, filter and output. See wiki page for additional information.
couchpotato
changed its name to couchpotato_list
.sonarr
changed its name to sonarr_list
.TVDB API has changed, now requires account_id (userkey) rather then user password.
TVDB plugins 'password' field has been changed to 'account_id'. To get your account_id visit http://thetvdb.com/?tab=userinfo
Plugin rlslog has been removed and is no longer supported
All TVDB plugins have been upgraded to use the new TVDB API api-beta.thetvdb.com/swagger#/
Due to the change in API the account_id
can no longer be used within tvdb plugins, it now requires username
and password
within your config.
The fields tvdb_ep_writers
and tvdb_ep_guest_stars
are no longer supported.
Field tvdb_banner_url
changed to tvdb_banner
Field tvdb_poster_url
changed to tvdb_posters
which is a list of the top 5 posters.
Python 2.6 is no longer being supported by FlexGet. Support for python 2.6 itself ended October 2013, and it is no longer receiving even security updates. You should upgrade to python 2.7 if you have not done so already.
The ignore_estimations
option in the Discover plugin was changed and now it should be used as release_estimations
. See plugin page for further information. If you did not use that option, no action is needed.
The urlrewrite_redirect
plugin, which previously rewrite all accepted entries' urls to any url they redirected to has been disabled by default. If you need this behavior, you must add redirect_url: yes
to your task.
The listdir
and find
plugins (which have been deprecated for a while) have now been removed. Their functionality can be replicated with the filesystem plugin. If you haven't already, you will need to make this change in your config.
Deluge 1.1 support has been removed from the deluge plugin.
The markdown option in the Telegram plugin was changed from use_markdown
to parse_mode
and it now accept either markdown
or html
. Update your configurations accordingly. Telegram API page for more details. Also, the minimal required version of python-telegram-bot
is 3.2.0
. Upgrade using pip install python-telegram-bot --upgrade
.
t411 replace torrent411 for discovering
The search plugin is called henceforth t411
instead of torrent411
. Credentials are no longer setted into config file ; remove username
and password
and setting up definetively your credentials via CLI flexget t411 add-auth <username> <password>
. Category and terms names are now the same as on the website. For example, HDrip-720p
becomes HDrip 720
.
t411 replace torrent411 urlrewritter for as input plugin
You can no longer use the plugin html
or rss
for scraping the Torrent411 website. Instead, use the t411 input plugin.
Due to a complete refactor of Pushover plugin, the field urltitle
need to be changed to url_title
in config. Users that do not use that field in their Pushover plugin config do not need to change anything, and all should work well.
TVRage seems to be down, so in its place we have implemented TVMaze, which requires a few new dependencies.
If you are installed from a git checkout, you'll have to make sure your deps are up to date after pulling. Run bin/pip install --upgrade -e .
from your checkout directory if you are using the virtualenv setup that bootstrap.py gives you.
trakt 2.0 api update
The trakt plugins have been updated to use the newest API (v2). Authorization is now handled by tokens. You can generate a pin for Flexget by visiting https://trakt.tv/pin/346. Use this pin to generate an access token by issuing the cli command flexget trakt auth <account> <pin>
, where <account>
is a local identifier that the access token is assigned to. We recommend that you use your Trakt username.
general changes for all trakt plugins
They no longer require password
and so this option should be deleted from your config. Instead it takes a new argument account
. Specifying an account
is required to access anything private/protected on trakt. You must specify either account
or username
. If account
is specified without username
, the owner of the account will be the assumed username.
Affected Plugins:
trakt_collected_lookup / trakt_watched_lookup
These plugins have been merged with trakt_lookup
and no longer exist. You'll need to specify the account
option in trakt_lookup in order for the related fields to be looked up.
trakt_lookup
Now supports movie lookups as well as episode and show lookups. It also takes two optional arguments username
and account
. Specifying a username
enables the previous functionality of trakt_collected_lookup
and trakt_watched_lookup
, which provide two new entry fields trakt_collected
and trakt_watched
respectively. These new fields indicate whether the entry has been collected or watched by the trakt user specified in username
argument.
trakt_lookup: yes
will enable the basic trakt lookup in your tasks.
find / listdir
The find
and listdir
plugins have been merged into one filesystem plugin. You will need to replace both in your config with just filesystem
.
A json api has been added which requires a few new dependencies. If you are installed from a git checkout, you'll have to make sure your deps are up to date after pulling. bin/pip install --upgrade -e .
from your checkout directory if you are using the virtualenv setup that bootstrap.py gives you.
disable_builtins
and disable_plugin
plugins have been combined into the disable plugin. You will need to replace both in your config with just disable
. If you were using disable_builtins: yes
form, this should be changed to disable: builtins
movie_queue / queue_movies
The movie_queue
plugin has been enhanced to include the ability to add & remove movies removing the need for the queue_movies
plugin. You will need to replace movie_queue: yes
with movie_queue: accept
to add any accepted items in the movie queue. Also, queue_movies: yes
is replaced by movie_queue: add
, which adds items to the movie queue.
trakt_emit / trakt_add / trakt_remove
These plugins have been update to use trakt api v2. They no longer need api_key
, which should be deleted from their config options. The built-in list names have been standardized to watchlist
, watched
, and collection
.
trakt_list
Trakt list has been updated to api v2, and the config has been made more consistent with the other trakt plugins. The built-in list names have been standardized to watchlist
, watched
, and collection
. Listing episodes from custom lists is now also possible. api_key
option should be removed from config. The list and type should now be specified as two separate options, e.g.
trakt_list:
username: me
api_key: blah
movies: watchlist
would now become:
trakt_list:
username: me
list: watchlist
type: movies