Board index Scripting and Automation Automated Media Center

Automated Media Center

Running FileBot from the console, Groovy / FileBot scripting, shell scripts, etc

Post 01 Aug 2012, 13:04
rednoah User avatar
The Source

Posts: 8573
Location: Taipei

Overview:
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 and JDownloader since filebot is really just a command-line tool you can probably make it work with any software that can run external programs, or just call it every once in a while with scheduler or 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:
filebot -script fn:amc --output "X:/Media" --action copy --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.

5. Restart! If you have just installed FileBot or Java you may need to restart your computer to avoid PATH issues.

Image
µTorrent / Preferences / Directories

Image
µ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:
filebot -script fn:amc --output "/path/to/output" --action copy -non-strict "/path/to/input" --log-file amc.log --def excludeList=amc.txt

Note that if you call this script in intervals every hour or every day you must set --def excludeList or you will get banned.


Options:
--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 Tell the given Kodi/XBMC 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 gmail=username:password Use the following gmail account to send and receive full reports. You must use an App Password for security reasons.
--def mail=host:port:from 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=y Save reports to local filesystem
--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 '{file}'" 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
--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.
--def "seriesFormat=S:/TV/{n}/{'S'+s}/{fn}" "animeFormat=T:/Anime/{n}/{fn}" "movieFormat=M:/Movies/{ny}/{fn}" "musicFormat=N:/Music/{n}/{fn}"


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 using the GUI filebot.launcher.exe instead of the CLI filebot.exe
  • If you have PATH issues, and it almost always is PATH issues, try using the absolute path to the executable, e.g. "C:/Program Files/FileBot/filebot.exe" or /usr/local/bin/filebot
  • If you have installed 32-bit Java you will need to install 32-bit FileBot for MediaInfo and 7zip to work. If you're on 64-bit, then only install 64-bit Java and 64-bit FileBot.
  • 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 XBMC/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
  • Using --action keeplink won't work because µTorrent has a known bug that prevents it from opening and seeding symbolic links
  • 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:
--filter "age < 7" --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:
--filter "age < 7 || !model.any{ it.age < 7 }" --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.


Troubleshooting
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:
[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"



Feedback
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. ;)
My (very excellent) support depends on Mac App Store sales and PayPal donations. Paying users, donors and everyone who contributes to FileBot in one way or another will get the very best support.

Image

Please read the FAQ and How to Request Help. Donate if you'd like some extra developer love. :ugeek:

rednoah User avatar
The Source

Posts: 8573
Location: Taipei

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 transmission-postprocess.sh that'll call filebot like this and make sure to chmod +rx it:
curl -O https://raw.githubusercontent.com/filebot/plugins/master/bash/transmission-postprocess.sh
chmod +rx transmission-postprocess.sh


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:
Image

Setup via Terminal on Linux:
Open ~/.config/transmission/settings.json and set it to call our shell script on download complete:
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/path/to/transmission-postprocess.sh",

Transmission Configuration Files:
https://trac.transmissionbt.com/wiki/ConfigFiles

Known Issues:
  • Transmission does not pass along TORRENT_LABEL which can affect detection accuracy
My (very excellent) support depends on Mac App Store sales and PayPal donations. Paying users, donors and everyone who contributes to FileBot in one way or another will get the very best support.

Image

Please read the FAQ and How to Request Help. Donate if you'd like some extra developer love. :ugeek:

rednoah User avatar
The Source

Posts: 8573
Location: Taipei

Here's how to set things up with the Deluge BitTorrent Client. Should work on Mac, Linux, BSD etc

Create a shell script deluge-postprocess.sh that'll call filebot and make sure to chmod +rx it:
curl -O https://raw.githubusercontent.com/filebot/plugins/master/bash/deluge-postprocess.sh
chmod +rx deluge-postprocess.sh

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 shell script.

Known Issues:
  • Scripts are run as 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
My (very excellent) support depends on Mac App Store sales and PayPal donations. Paying users, donors and everyone who contributes to FileBot in one way or another will get the very best support.

Image

Please read the FAQ and How to Request Help. Donate if you'd like some extra developer love. :ugeek:

rednoah User avatar
The Source

Posts: 8573
Location: Taipei

If you're using rTorrent on a headless machine it's just as easy. You just need to edit rtorrent.rc a bit.

  1. Create a shell script rtorrent-postprocess.sh that'll call filebot and the amc script
    curl -O https://raw.githubusercontent.com/filebot/plugins/master/bash/rtorrent-postprocess.sh

  2. Make sure that the script is executable
    chmod +rx rtorrent-postprocess.sh

  3. Edit ~/.rtorrent.rc and add an event.download.finished key
    echo 'system.method.set_key=event.download.finished,filebot,"execute={'`pwd`/rtorrent-postprocess.sh',$d.get_base_path=,$d.get_name=,$d.get_custom1=}"' >> ~/.rtorrent.rc
My (very excellent) support depends on Mac App Store sales and PayPal donations. Paying users, donors and everyone who contributes to FileBot in one way or another will get the very best support.

Image

Please read the FAQ and How to Request Help. Donate if you'd like some extra developer love. :ugeek:

rednoah User avatar
The Source

Posts: 8573
Location: Taipei

The qBittorrent setup is pretty similar to µTorrent. Just paste the following command into the Run an external program on torrent completion setting.

Options ► Downloads ► Run an external program on torrent completion:
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_dir=%F" "ut_kind=multi" "ut_title=%N" "ut_label=%L"

Image
My (very excellent) support depends on Mac App Store sales and PayPal donations. Paying users, donors and everyone who contributes to FileBot in one way or another will get the very best support.

Image

Please read the FAQ and How to Request Help. Donate if you'd like some extra developer love. :ugeek:

Post 28 Oct 2014, 10:25
rednoah User avatar
The Source

Posts: 8573
Location: Taipei

If you're having any issues...

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

thx :ugeek:
My (very excellent) support depends on Mac App Store sales and PayPal donations. Paying users, donors and everyone who contributes to FileBot in one way or another will get the very best support.

Image

Please read the FAQ and How to Request Help. Donate if you'd like some extra developer love. :ugeek:


Return to Scripting and Automation