Page 1 of 1

Automated Media Center

Posted: 01 Aug 2012, 13:04
by rednoah
The amc script will automatically organize your media. It's a simple command-line tool that can be called manually or by other tools on one or many files. It'll fully automatically organize your TV shows and movies and is smart enough to detect what is what. The script will only touch video/subtitle files and will leave everything else as is.
  1. Unrar archives
  2. Group movies and episodes and then handle them separately (auto-detect episode / movie files)
  3. Fetch subtitles and transcode to SubRip/UTF-8
  4. Copy and Organize episodes, movies and music files into folders and rename files properly
    • Movies will be sorted into {output}/Movies/Name (Year)/Name (Year) [CD123].ext
    • TV Shows will be sorted into {output}/TV Shows/Name/Season N/Name - S00E00 - Title.ext
    • Music will be sorted into {output}/Music/Artist/Album/Artist - Title.ext
  5. Fetch artwork and generate .nfo files
  6. Notify Plex, Kodi or Emby to refresh the video library
  7. Send a report about newly added files per Email, PushBullet or Pushover
There's setup instructions for µTorrent, qBittorrent, rTorrent, Deluge, Transmission, Vuze, JDownloader and Automator. Since filebot is a simple command-line tool you can make it work with any software that can run external programs, or just call it every once in a while with cron.

Setup Instructions for µTorrent:
1. Setup µTorrent directories. Setup Location of Downloaded Files and make sure the path does not end with backslash.

2. Setup µTorrent to run FileBot. Paste the following command into µTorrent Run Program settings.

µTorrent ► Run Program ► Run this program when torrent finishes:

Code: Select all

filebot -script fn:amc --output "X:/Media" --action duplicate --conflict skip -non-strict --log-file amc.log --def unsorted=y music=y artwork=y "ut_label=%L" "ut_state=%S" "ut_title=%N" "ut_kind=%K" "ut_file=%F" "ut_dir=%D"
3. Change --output to where you want to copy / organize your files. Input is provided by µTorrent variables.

4. Done! Setting this up will take less than a minute. Now wait and enjoy how things will be organized fully automatically.

µTorrent / Preferences / Directories

µTorrent / Preferences / Run Program / Run this program when torrent finishes

Run from cmdline:
Want to try it out first? Running directly from cmdline is even easier and if you set --action test you can do a dry-run and see if everything gets matched up correctly:

Code: Select all

filebot -script fn:amc --output "/path/to/output" --action duplicate -non-strict "/path/to/input" --log-file amc.log --def excludeList=amc.txt
  • If you run this script manually, you can set --mode interactive to enable console-interactive mode.
  • If you run this script automatically in intervals every hour or every day, then you must set --def excludeList or you will get banned.

--def music=y Process music files as well. Disabled by default.
--conflict skip Never override existing files if the same media is downloaded multiple times
--conflict auto Override existing media only if new media is better
--def subtitles=en,de,fr Download subtitles for the given languages
--def artwork=y Fetch artwork/nfo
--def extras=y Generate *.url files and fetch all available backdrops
--def kodi=host[:port] Tell the given Kodi instance to rescan it's library
--def plex=host:token Tell the given Plex instance to rescan it's library. Plex Home instances require an authentication token.
--def emby=host:apikey Tell the given Emby instance to rescan it's library.
--def pushover=userkey[:apikey] Send update notifications to your devices via Pushover. It is recommended that you create your own API key.
--def pushbullet=apikey Send full reports to all your PushBullet devices
--def discord=webhook Send update notifications to your Discord channel
--def gmail=username:password Use the following gmail account to send and receive full reports. You must use an App Password for security reasons. Linux / BSD / macOS users may prefer to use the send-email-log bash script to capture the entire console output.
--def mail=host:port:from[:username:password] Send email via private mail server
--def mailto=email Send report to the given email address (optional, email to yourself if not set)
--def reportError=y Report errors via email
--def storeReport=/path/to/folder Save HTML reports to this folder
--def extractFolder=/path/to/folder Extract archives to this folder
--def skipExtract=y Do not extract archives
--def deleteAfterExtract=y Delete archives after extraction
--def clean=y Automatically remove empty folders and clutter files that may be left behind after moving the video files, or temporary extracted files after copying
--def exec="echo {quote f}" Run program on newly processed files
--def unsorted=y Move media files that cannot be identified to a separate folder
--def ignore=regex Ignore filepaths that match the given regular expression (case-insensitive by default)
--def minFileSize=0 Only process video files larger than the given number (in bytes). Defaults to 50 MB.
--def minLengthMS=0 Only process videos longer than the given number (in milliseconds). Defaults to 10 minutes.
--def excludeList=amc.txt Keep a list of previously processed files to be ignored in future runs (if you run this script on the same files repeatedly you must enable this option)

Change how files will be organized and renamed:
This script uses multiple format expressions, so the simple --format option is not supported. You can override the default naming schemes via --def seriesFormat, animeFormat or movieFormat. Relative paths will be resolved against --output and you can use absolute paths if you want to use multiple drives.

Code: Select all

--def movieFormat="M:/{plex}" seriesFormat="S:/{plex}" animeFormat="T:/{plex}" musicFormat="N:/{plex}"
  • Start with the {plex} format and then modify things to fit your needs.
  • Make sure that you understand how format expressions work, and what bindings like {n} or {fn} mean.
  • Use the @/path/to/file syntax to read complex arguments from a text file.
Common Problems
  • The folder paths to Location of Downloaded Files (--output) must not end with backslash \ because the value gets passed through as the %D token. So the final backslash \ will escape the double-quote " and mess up everything.
  • It is recommended to use / as separator and not \ since it's also used to escape characters, e.g. --output "X:\" will mess up the cmdline in unexpected ways.
  • You can prevent the console from popping up by calling filebot via a pyw script.
  • You can (and should) force Movie/Series/Anime mode or force ignore files via labels, e.g. label as Movie to force TheMovieDB, Series to force TheTVDB, Anime to force AniDB, or other to ignore all files. Alternatively, folder names such as Movies/TV Shows/Anime may also be used to force a specific mode.
  • Anime are inherently TV Shows, so Anime will only be detected as Anime and processed with AniDB if the files have Anime-like characteristics.
  • If you use more than one Kodi / Plex you can specify multiple hosts like this --def xbmc=host1,host2,host3,etc.
  • Use --conflict fail to make the script terminate on any conflicts or failures rather than gracefully ignore these errors and continue.
  • You must not use your download folder %D (or any other folder inside) as --output folder.
  • You must not use the filesystem root (e.g. E:\ or /) as input or --output folder.
  • Calling -script fn:amc means that it will automatically fetch the script from GitHub so it will auto-update but you won't be able to modify it.

Advanced Fine-Tuning
You can (and should) force Movie/Series/Anime mode by setting --def ut_label accordingly, and you can further define your own --filter rules to fine-tune matching to your exact needs, and avoid mismatches. For example, if one show is confused with another due to bad naming or missing data you can simply exclude the bad one, or if you only process recently aired episodes you could exclude any episode of any show that has been aired for more than a few days.

e.g. if you only process recently aired episodes you can virtually guarantee 100% auto-detection accuracy by adding simple filter rules such as these:

Code: Select all

--filter "age < 5" --def "ut_label=TV"
e.g. if you're a typical user, and find a simple age filter too restrictive, then this slightly augmented age filter rule might be the magic bullet that fixes all your problems:

Code: Select all

--filter "age < 5 || 5 <= model.age.min()" --def "ut_label=TV"
--filter rules are extremely flexible so more complex scenarios, such as applying certain filters only for certain labels or files, is fully supported.

If something is not working, first read the Notes above, then just run the command manually in a new console window and see what happens. You CANNOT run the command without replacing the VARIABLES. The variables have to be replaced with actual values first. You can find the actual cmdline call in the µTorrents Logger tab so you can just copy it from there. You may need to enable the Logger tab first (just right-click one of the other tabs like Info).

*** If you need help start a new thread and always include cmdline output! ***

It's always helpful to check the exact command utorrent ends up executing in the Logger tab. It'll look something like this:

Code: Select all

[2013-03-05 20:44:24]  Executing: filebot -script fn:amc --output "D:/Organized Media" --log-file amc.log --action duplicate --conflict override -non-strict --def "ut_dir=D:\Media\Avatar" "ut_file=" "ut_kind=multi" "ut_title=Avatar" "ut_label=" "ut_state=5"

I'd love to get some feedback on how well this script works for everybody. Should work perfectly for most, but there's always tricky cases that might not be covered yet. Also if you've set the script up to work with deluge, transmission, cron, automator, etc I'd like to hear from you. ;)

[Transmission] Setup for Linux or Mac with Transmission

Posted: 06 Feb 2013, 07:28
by rednoah
Since the utorrent-postprocess integration as described above only works on Windows you might be wondering how to set things up on Linux or Mac with other bittorrent clients. Here's a little tutorial how to set this up with Transmission BitTorrent Client.

This guide assumes that you have already installed the filebot command-line tools so make sure filebot -version works.

1. Create On Torrent Completion Script

Create a On Torrent Completion shell script that'll call filebot like this and make sure to chmod +rx it:

Code: Select all

curl -O
chmod +rx
2. Set Transmission to call our shell script on completion

Setup via GUI on Mac:
Open Transmission ► Preferences ► Transfers ► Management and set it to call our script when download completes:

Setup via Terminal on Linux:
Open ~/.config/transmission/settings.json and set it to call our shell script on download complete:

Code: Select all

"script-torrent-done-enabled": true, 
"script-torrent-done-filename": "/path/to/",
Transmission Configuration Files:

Known Issues:
  • Transmission does not pass along TORRENT_LABEL which can affect detection accuracy

[Deluge] Setup for Linux or Mac with Deluge

Posted: 06 Feb 2013, 09:03
by rednoah
Here's how to set things up with the Deluge BitTorrent Client. Should work on Mac, Linux, BSD, etc.

Create a shell script that'll call filebot and make sure to chmod +rx it:

Code: Select all

curl -O
chmod +rx
Open Deluge ► Preferences ► Plugins and activate the Execute plugin. Then go to Preferences ► Execute, add a new Torrent Complete event and set it to call our newly created shell script:

Code: Select all

Known Issues:
  • Scripts run as the deluge user so environment variables like $HOME may not work as expected
  • The Deluge Execute plugin does not pass along TORRENT_LABEL which can affect detection accuracy

:!: These instructions DO NOT apply to Microsoft Windows. Integrating FileBot with Deluge for Windows is possible but difficult. Using qBittorrent instead is therefore generally recommended.

[rTorrent] Setup for Linux with rTorrent

Posted: 21 Jul 2013, 05:41
by rednoah
If you're using rTorrent on a headless machine it's just as easy. You just need to edit rtorrent.rc a bit.
  1. Run this command to create a shell script that'll call filebot and the amc script:

    Code: Select all

    curl -O
  2. Run this command to make sure that the script is executable:

    Code: Select all

    chmod +rx
  3. Run this command to edit ~/.rtorrent.rc and add an hook:

    Code: Select all

    echo ',filebot,"execute={'`pwd`/',$d.get_base_path=,$d.get_name=,$d.get_custom1=}"' >> ~/.rtorrent.rc
Known Issues:
  • The latest revision of rtorrent seems to have introduced breaking changes in how ~/.rtorrent.rc works. Read this thread for details.

[qBittorrent] Setup for Windows, Linux and Mac OS X

Posted: 12 May 2014, 17:30
by rednoah
The qBittorrent setup is pretty similar to µTorrent. Just paste the following command into the Run an external program on torrent completion setting.

Instructions for Windows:

Options ► Downloads ► Run an external program on torrent completion:

Code: Select all

filebot -script fn:amc --output "X:/Media" --action duplicate --conflict skip -non-strict --log-file amc.log --def excludeList=amc.excludes --def unsorted=y music=y artwork=y "ut_label=%L" "ut_title=%N" "ut_kind=multi" "ut_dir=%F"

Instructions for Mac and Linux:

Options ► Downloads ► Run an external program on torrent completion:

Code: Select all

filebot -script fn:amc --output "/path/to/media" --action duplicate --conflict skip -non-strict --log-file amc.log --def excludeList=amc.excludes unsorted=y music=y artwork=y "ut_label=%L" "ut_title=%N" "ut_kind=multi" "ut_dir=%F"

:idea: You may need to use the absolute path to the executable (e.g. /usr/local/bin/filebot) if you get filebot: command not found issues.

:idea: If you are using qBittorrent 3.* then the %variables may need to be adjusted:

Code: Select all

--def "ut_label=none" "ut_title=%n" "ut_kind=multi" "ut_dir=%f"


Posted: 28 Oct 2014, 10:25
by rednoah
If you're having any issues...

1. Make a NEW thread
2. Include log output
3. Include full paths when reporting mismatches

thx :ugeek: