clinton-hall / nzbToMedia

Provides NZB and Torrent postprocessing To CouchPotatoServer, SickBeard/SickRage, HeadPhones, Mylar and Gamez
GNU General Public License v3.0
671 stars 176 forks source link

Post-processing error #1130

Closed ikkeenjij36 closed 7 years ago

ikkeenjij36 commented 7 years ago

Hello i have this error on clean install on synology server with cp sonarr and headphones,this is the result from sabnzbd and sonarr with nzbmedia.py [08:25:32] [INFO]::MAIN: Loading config from [/volume1/script/nzbToMedia-master/autoProcessMedia.cfg] [08:25:32] [INFO]::MAIN: Checking database structure... [08:25:32] [DEBUG]::MAIN: Checking Initial Schema database upgrade [08:25:32] [DB]::MAIN: nzbtomedia.db: SELECT 1 FROM sqlite_master WHERE name = ?; with args ('db_version',) [08:25:32] [DB]::MAIN: nzbtomedia.db: SELECT db_version FROM db_version [08:25:32] [DEBUG]::MAIN: InitialSchema upgrade not required [08:25:32] [INFO]::MAIN: Checking if source needs an update [08:25:33] [DEBUG]::MAIN: cur_commit = 26957918e562918c653292d33e2c11206ce6ccb9 % (newest_commit)= 26957918e562918c653292d33e2c11206ce6ccb9, num_commits_behind = 0 [08:25:33] [INFO]::MAIN: No update needed [08:25:33] [INFO]::MAIN: nzbToMedia Version:26957918e562918c653292d33e2c11206ce6ccb9 Branch:master (Linux 3.10.35) [08:25:33] [WARNING]::MAIN: Failed to locate ffprobe. Video corruption detection disabled! [08:25:33] [WARNING]::MAIN: Install ffmpeg with x264 support to enable this feature ... Traceback (most recent call last): File "/volume1/script/nzbToMedia-master/nzbToMedia.py", line 811, in exit(main(sys.argv)) File "/volume1/script/nzbToMedia-master/nzbToMedia.py", line 643, in main core.initialize(section) File "/volume1/script/nzbToMedia-master/core/init.py", line 806, in initialize SECTIONS = CFG[tuple(x for x in CFG if CFG[x].sections and CFG[x].isenabled()) if not section else (section,)] File "/volume1/script/nzbToMedia-master/core/init.py", line 806, in SECTIONS = CFG[tuple(x for x in CFG if CFG[x].sections and CFG[x].isenabled()) if not section else (section,)] File "/volume1/script/nzbToMedia-master/core/nzbToMediaConfig.py", line 33, in isenabled if int(value) != 1: ValueError: invalid literal for int() with base 10: '' Exception TypeError: "'NoneType' object is not callable" in <bound method PosixProcess.del of <core.nzbToMediaUtil.PosixProcess object at 0x7fc5b23cfbd0>> ignored``

clinton-hall commented 7 years ago

In your autoProcessMedia.cfg, please make sure that all enabled options are set as either 1 or 0

ikkeenjij36 commented 7 years ago

Well i did that and still the same result? This is my config of autoProcessMedia.cfg

nzbToMedia Configuration

For more information, visit https://github.com/clinton-hall/nzbToMedia/wiki

[General]

Enable/Disable update notifications

version_notify = 1
# Enable/Disable automatic updates
auto_update = 1
# Set to the full path to the git executable
git_path = ""
# GitHUB user for repo
git_user = ""
# GitHUB branch for repo
git_branch = ""
# Enable/Disable forceful cleaning of leftover files following postprocess 
force_clean = 1
# Enable/Disable logging debug messages to nzbtomedia.log
log_debug = 1
# Enable/Disable logging database messages to nzbtomedia.log
log_db = 1
# Enable/Disable logging environment variables to debug nzbtomedia.log (helpful to track down errors calling external tools.)
log_env = 1
# Enable/Disable logging git output to debug nzbtomedia.log (helpful to track down update failures.)
log_git = 1
# Set to the directory where your ffmpeg/ffprobe executables are located
ffmpeg_path = ""
# Enable/Disable media file checking using ffprobe.
check_media = 1
# Enable/Disable a safety check to ensure we don't process all downloads in the default_downloadDirectories by mistake.
safe_mode = 1

[Posix]

Process priority setting for External commands (Extractor and Transcoder) on Posix (Unix/Linux/OSX) systems.

# Set the Niceness value for the nice command. These range from -20 (most favorable to the process) to 19 (least favorable to the process).
niceness = 0
# Set the ionice scheduling class. 0 for none, 1 for real time, 2 for best-effort, 3 for idle.
ionice_class = 0
# Set the ionice scheduling class data. This defines the class data, if the class accepts an argument. For real time and best-effort, 0-7 is valid data.
ionice_classdata = 0

[CouchPotato]

autoProcessing for Movies

#### movie - category that gets called for post-processing with CPS
[[movie]]
    enabled = 0
    apikey = ""
    host = localhost
    port = 5050
    ###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
    ssl = 0
    web_root = ""
    # Enable/Disable linking for Torrents
    Torrent_NoLink = 0
    keep_archive = 1
    method = renamer
    delete_failed = 0
    wait_for = 2
    extract = 1
    # Set this to minimum required size to consider a media file valid (in MB)
    minSize = 0
    # Enable/Disable deleting ignored files (samples and invalid media files)
    delete_ignored = 0
    ##### Enable if Couchpotato is on a remote server for this category
    remote_path = 0
    ##### Set to path where download client places completed downloads locally for this category
    watch_dir = ""
    ##### Set the recursive directory permissions to the following (0 to disable)
    chmodDirectory = 0
[[film]]
    enabled = 1
    apikey = c66581f9fdf84379baf15fd3fa55186f
    host = localhost
    port = 5053
    ssl = 0
    web_root = ""
    Torrent_NoLink = 0
    keep_archive = 1
    method = renamer
    delete_failed = 0
    wait_for = 2
    extract = 1
    minSize = 0
    delete_ignored = 0
    remote_path = 0
    watch_dir = ""
    chmodDirectory = 0

[SickBeard]

autoProcessing for TV Series

#### tv - category that gets called for post-processing with SB
[[tv]]
    enabled = 0
    host = localhost
    port = 8081
    username = ""
    password = ""
    ###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
    web_root = ""
    ssl = 0
    fork = auto
    delete_failed = 0
    # Enable/Disable linking for Torrents
    Torrent_NoLink = 0
    keep_archive = 1
    process_method = ""
    # force processing of already processed content when running a manual scan.
    force = 0
    # tell SickRage/Medusa to delete all source files after processing.
    delete_on = 0
    # tell Medusa to ignore check for associated subtitle check when postponing release
    ignore_subs = 0
    extract = 1
    nzbExtractionBy = Downloader
    # Set this to minimum required size to consider a media file valid (in MB)
    minSize = 0
    # Enable/Disable deleting ignored files (samples and invalid media files)
    delete_ignored = 0
    ##### Enable if SickBeard is on a remote server for this category
    remote_path = 0
    ##### Set to path where download client places completed downloads locally for this category
    watch_dir = ""
    ##### Set the recursive directory permissions to the following (0 to disable)
    chmodDirectory = 0

[NzbDrone]

autoProcessing for TV Series

#### ndCategory - category that gets called for post-processing with NzbDrone
[[tv]]
    enabled = 0
    apikey = ""
    host = localhost
    port = 8989
    username = ""
    password = ""
    ###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
    web_root = ""
    ssl = 0
    delete_failed = 0
    # Enable/Disable linking for Torrents
    Torrent_NoLink = 0
    keep_archive = 1
    extract = 1
    nzbExtractionBy = Downloader
    wait_for = 2
    # Set this to minimum required size to consider a media file valid (in MB)
    minSize = 0
    # Enable/Disable deleting ignored files (samples and invalid media files)
    delete_ignored = 0
    ##### Enable if NzbDrone is on a remote server for this category
    remote_path = 0
    ##### Set to path where download client places completed downloads locally for this category
    watch_dir = ""
[[tvseries]]
    enabled = 1
    apikey = c66581f9fdf84379baf15fd3fa55186f
    host = localhost
    port = 8989
    username = ""
    password = ""
    web_root = ""
    ssl = 0
    delete_failed = 0
    Torrent_NoLink = 0
    keep_archive = 1
    extract = 1
    nzbExtractionBy = Downloader
    wait_for = 2
    minSize = 0
    delete_ignored = 0
    remote_path = 0
    watch_dir = ""

[HeadPhones]

autoProcessing for Music

#### music - category that gets called for post-processing with HP
[[music]]
    enabled = 0
    apikey = ""
    host = localhost
    port = 8181
    ###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
    ssl = 0
    web_root = ""
    wait_for = 2
    # Enable/Disable linking for Torrents
    Torrent_NoLink = 0
    keep_archive = 1
    extract = 1
    # Set this to minimum required size to consider a media file valid (in MB)
    minSize = 0
    # Enable/Disable deleting ignored files (samples and invalid media files)
    delete_ignored = 0
    ##### Enable if HeadPhones is on a remote server for this category
    remote_path = 0
    ##### Set to path where download client places completed downloads locally for this category
    watch_dir = ""
[[muziek]]
    enabled = ""
    apikey = 49fc5e051fb43b333bf284bb7caa9548
    host = localhost
    port = 8182
    ssl = 0
    web_root = ""
    wait_for = 2
    Torrent_NoLink = 0
    keep_archive = 1
    extract = 1
    minSize = 0
    delete_ignored = 0
    remote_path = 0
    watch_dir = ""

[Mylar]

autoProcessing for Comics

#### comics - category that gets called for post-processing with Mylar
[[comics]]
    enabled = 0
    host = localhost
    port = 8090
    username = ""
    password = ""
    ###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
    web_root = ""
    ssl = 0
    # Enable/Disable linking for Torrents
    Torrent_NoLink = 0
    keep_archive = 1
    extract = 1
    # Set this to minimum required size to consider a media file valid (in MB)
    minSize = 0
    # Enable/Disable deleting ignored files (samples and invalid media files)
    delete_ignored = 0
    ##### Enable if Mylar is on a remote server for this category
    remote_path = 0
    ##### Set to path where download client places completed downloads locally for this category
    watch_dir = ""

[Gamez]

autoProcessing for Games

#### games - category that gets called for post-processing with Gamez
[[games]]
    enabled = 0
    apikey = ""
    host = localhost
    port = 8085
    ###### 
    library = Set to path where you want the processed games to be moved to.
    ###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
    ssl = 0
    web_root = ""
    # Enable/Disable linking for Torrents
    Torrent_NoLink = 0
    keep_archive = 1
    extract = 1
    # Set this to minimum required size to consider a media file valid (in MB)
    minSize = 0
    # Enable/Disable deleting ignored files (samples and invalid media files)
    delete_ignored = 0
    ##### Enable if Gamez is on a remote server for this category
    remote_path = 0
    ##### Set to path where download client places completed downloads locally for this category
    watch_dir = ""

[Network]

Enter Mount points as LocalPath,RemotePath and separate each pair with '|'

# e.g. MountPoints = /volume1/Public/,E:|/volume2/share/,\NAS\
mount_points = ""

[Nzb]

clientAgent - Supported clients: sabnzbd, nzbget
clientAgent = sabnzbd
###### SabNZBD (You must edit this if your using nzbToMedia.py with SabNZBD)
sabnzbd_host = http://localhost
sabnzbd_port = 8080
sabnzbd_apikey = b68fdb4318b7f693559ad36e80b41ed3
###### Enter the default path to your default download directory (non-category downloads). this directory is protected by safe_mode.
default_downloadDirectory = /volume1/downloads/complete/standaard

[Torrent]

clientAgent - Supported clients: utorrent, transmission, deluge, rtorrent, vuze, other
clientAgent = other
###### useLink - Set to hard for physical links, sym for symbolic links, move to move, move-sym to move and link back, and no to not use links (copy)
useLink = hard
###### outputDirectory - Default output directory (categories will be appended as sub directory to outputDirectory)
outputDirectory = /abs/path/to/complete/
###### Enter the default path to your default download directory (non-category downloads). this directory is protected by safe_mode. 
default_downloadDirectory = ""
###### Other categories/labels defined for your downloader. Does not include CouchPotato, SickBeard, HeadPhones, Mylar categories.
categories = music_videos, pictures, software, manual
###### A list of categories that you don't want to be flattened (i.e preserve the directory structure when copying/linking.
noFlatten = pictures, manual
###### uTorrent Hardlink solution (You must edit this if your using TorrentToMedia.py with uTorrent)
uTorrentWEBui = http://localhost:8090/gui/
uTorrentUSR = your username
uTorrentPWD = your password
###### Transmission (You must edit this if your using TorrentToMedia.py with Transmission)
TransmissionHost = localhost
TransmissionPort = 9091
TransmissionUSR = your username
TransmissionPWD = your password
#### Deluge (You must edit this if your using TorrentToMedia.py with deluge. Note that the host/port is for the deluge daemon, not the webui)
DelugeHost = localhost
DelugePort = 58846
DelugeUSR = your username
DelugePWD = your password
###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
deleteOriginal = 0
chmodDirectory = 0
resume = 1
resumeOnFailure = 1

[Extensions] compressedExtensions = .zip, .rar, .7z, .gz, .bz, .tar, .arj, .1, .01, .001 mediaExtensions = .mkv, .avi, .divx, .xvid, .mov, .wmv, .mp4, .mpg, .mpeg, .vob, .iso, .m4v, .ts audioExtensions = .mp3, .aac, .ogg, .ape, .m4a, .asf, .wma, .flac metaExtensions = .nfo, .sub, .srt, .jpg, .gif

[Plex]

Only enter these details if you want to update plex library after processing.

# Do not enter these details if you send the plex notifications from Sickbeard/CouchPotato.
plex_host = localhost
plex_port = 32400
plex_token = ""
plex_ssl = 0
# Enter Plex category to section mapping as Category,section and separate each pair with '|'
# e.g. plex_sections = movie,3|tv,4
plex_sections = ""

[Transcoder]

getsubs. enable to download subtitles.

getSubs = 0
# subLanguages. create a list of languages in the order you want them in your subtitles. 
subLanguages = eng, spa, fra
# transcode. enable to use transcoder
transcode = 0
###### duplicate =1 will create a new file. =0 will replace the original
duplicate = 1
# concat. joins cd1 cd2 etc into a single video.
concat = 1
# IgnoreExtensions is a comma-separated list of extensions that will not be transcoded.
ignoreExtensions = .avi, .mkv, .mp4
# outputFastStart. 1 will use -movflags + faststart. 0 will disable this from being used.
outputFastStart = 0
# outputQualityPercent. used as -q:a value. 0 will disable this from being used.
outputQualityPercent = 0
# outputVideoPath. Set path you want transcoded videos moved to. Leave blank to disable.
outputVideoPath = ""
# processOutput. 1 will send the outputVideoPath to SickBeard/CouchPotato. 0 will send original files.
processOutput = 0
# audioLanguage. set the 3 letter language code you want as your primary audio track.
audioLanguage = eng
# allAudioLanguages. 1 will keep all audio tracks (uses AudioCodec3) where available.
allAudioLanguages = 0
# allSubLanguages. 1 will keep all existing sub languages. 0 will discard those not in your list above.
allSubLanguages = 0
# embedSubs. 1 will embed external sub/srt subs into your video if this is supported.
embedSubs = 1
# burnInSubtitle. burns the default sub language into your video (needed for players that don't support subs)
burnInSubtitle = 0
# extractSubs. 1 will extract subs from the video file and save these as external srt files.
extractSubs = 0
# externalSubDir. set the directory where subs should be saved (if not the same directory as the video)
externalSubDir = ""
# hwAccel. 1 will set ffmpeg to enable hardware acceleration (this requires a recent ffmpeg)
hwAccel = 0
# generalOptions. Enter your additional ffmpeg options here with commas to separate each option/value (i.e replace spaces with commas).
generalOptions = ""
# outputDefault. Loads default configs for the selected device. The remaining options below are ignored.
# If you want to use your own profile, leave this blank and set the remaining options below.
# outputDefault profiles allowed: iPad, iPad-1080p, iPad-720p, Apple-TV2, iPod, iPhone, PS3, xbox, Roku-1080p, Roku-720p, Roku-480p, mkv, mp4-scene-release
outputDefault = ""
#### Define custom settings below.
outputVideoExtension = .mp4
outputVideoCodec = libx264
VideoCodecAllow = ""
outputVideoPreset = medium
outputVideoResolution = 1920:1080
outputVideoFramerate = 24
outputVideoBitrate = 800000
outputVideoCRF = 19
outputVideoLevel = 3.1
outputAudioCodec = ac3
AudioCodecAllow = ""
outputAudioChannels = 6
outputAudioBitrate = 640k
outputAudioTrack2Codec = libfaac
AudioCodec2Allow = ""
outputAudioTrack2Channels = 2
outputAudioTrack2Bitrate = 128000
outputAudioOtherCodec = libmp3lame
AudioOtherCodecAllow = ""
outputAudioOtherChannels = ""
outputAudioOtherBitrate = 128000
outputSubtitleCodec = ""

[WakeOnLan]

set wake = 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) the host and port specified.
wake = 0
host = 192.168.1.37
port = 80
mac = 00:01:2e:2D:64:e1

[UserScript]

Use user_script for uncategorized downloads

#Set the categories to use external script.
#Use "UNCAT" to process non-category downloads, and "ALL" for all defined categories.
[[UNCAT]]
    #Enable/Disable this subsection category
    enabled = 0
    Torrent_NoLink = 0
    keep_archive = 1
    extract = 1
    #Enable if you are sending commands to a remote server for this category
    remote_path = 0
    #What extension do you want to process? Specify all the extension, or use "ALL" to process all files.
    user_script_mediaExtensions = .mkv, .avi, .divx, .xvid, .mov, .wmv, .mp4, .mpg, .mpeg
    #Specify the path to your custom script. Use "None" if you wish to link this category, but NOT run any external script.
    user_script_path = /nzbToMedia/userscripts/script.sh
    #Specify the argument(s) passed to script, comma separated in order.
    #for example FP,FN,DN, TN, TL for file path (absolute file name with path), file name, absolute directory name (with path), Torrent Name, Torrent Label/Category.
    #So the result is /media/test/script/script.sh FP FN DN TN TL. Add other arguments as needed eg -f, -r
    user_script_param = FN
    #Set user_script_runOnce = 0 to run for each file, or 1 to only run once (presumably on the entire directory).
    user_script_runOnce = 0
    #Specify the successcodes returned by the user script as a comma separated list. Linux default is 0
    user_script_successCodes = 0
    #Clean after? Note that delay function is used to prevent possible mistake :) Delay is intended as seconds
    user_script_clean = 1
    delay = 120
    #Unique path (directory) created for every download. set 0 to disable.
    unique_path = 1
    ##### Set to path where download client places completed downloads locally for this category
    watch_dir = ""

[ASCII]

Set convert =1 if you want to convert any "foreign" characters to ASCII (UTF8) before passing to SB/CP etc. Default is disabled (0).

convert = 0

[passwords]

enter the full path to a text file containing passwords to be used for extraction attempts.

# In the passwords file, every password should be on a new line
PassWordFile = ""

[Custom]

enter a list (comma separated) of Group Tags you want removed from filenames to help with subtitle matching.

# e.g remove_group = [rarbag],-NZBgeek
# be careful if your "group" is a common "real" word. Please report if you have any group replacements that would fall in this category.
remove_group = ""

`` And this is my nzbToMeida config

!/usr/bin/env python2

coding=utf-8

# ##############################################################################

NZBGET POST-PROCESSING SCRIPT

Post-Process to CouchPotato, SickBeard, NzbDrone, Mylar, Gamez, HeadPhones.

#

This script sends the download to your automated media management servers.

#

NOTE: This script requires Python to be installed on your system.

##############################################################################

OPTIONS

General

Auto Update nzbToMedia (0, 1).

#

Set to 1 if you want nzbToMedia to automatically check for and update to the latest version

auto_update=0

Check Media for corruption (0, 1).

#

Enable/Disable media file checking using ffprobe.

check_media=1

Safe Mode protection of DestDir (0, 1).

#

Enable/Disable a safety check to ensure we don't process all downloads in the default_downloadDirectory by mistake.

safe_mode=1

CouchPotato

CouchPotato script category.

#

category that gets called for post-processing with CouchPotatoServer.

cpsCategory=movie

CouchPotato api key.

cpsapikey=

CouchPotato host.

#

The ipaddress for your CouchPotato server. e.g For the Same system use localhost or 127.0.0.1

cpshost=localhost

CouchPotato port.

cpsport=5053

CouchPotato uses ssl (0, 1).

#

Set to 1 if using ssl, else set to 0.

cpsssl=0

CouchPotato URL_Base

#

set this if using a reverse proxy.

cpsweb_root=

CouchPotato Postprocess Method (renamer, manage).

#

use "renamer" for CPS renamer (default) or "manage" to call a manage update.

cpsmethod=renamer

CouchPotato Delete Failed Downloads (0, 1).

#

set to 1 to delete failed, or 0 to leave files in place.

cpsdelete_failed=0

CouchPotato wait_for

#

Set the number of minutes to wait after calling the renamer, to check the movie has changed status.

cpswait_for=2

Couchpotato and NZBGet are a different system (0, 1).

#

Enable to replace local path with the path as per the mountPoints below.

cpsremote_path=0

SickBeard

SickBeard script category.

#

category that gets called for post-processing with SickBeard.

sbCategory=tv

SickBeard host.

#

The ipaddress for your SickBeard/SickRage server. e.g For the Same system use localhost or 127.0.0.1

sbhost=localhost

SickBeard port.

sbport=8081

SickBeard username.

sbusername=

SickBeard password.

sbpassword=

SickBeard uses ssl (0, 1).

#

Set to 1 if using ssl, else set to 0.

sbssl=0

SickBeard web_root

#

set this if using a reverse proxy.

sbweb_root=

SickBeard watch directory.

#

set this if SickBeard and nzbGet are on different systems.

sbwatch_dir=

SickBeard fork.

#

set to default or auto to auto-detect the custom fork type.

sbfork=auto

SickBeard Delete Failed Downloads (0, 1).

#

set to 1 to delete failed, or 0 to leave files in place.

sbdelete_failed=0

SickBeard Ignore associated subtitle check (0, 1).

#

set to 1 to ignore subtitles check, or 0 to don't check.

sbignore_subs=0

SickBeard process method.

#

set this to move, copy, hardlink, symlink as appropriate if you want to over-ride SB defaults. Leave blank to use SB default.

sbprocess_method=

SickBeard and NZBGet are a different system (0, 1).

#

Enable to replace local path with the path as per the mountPoints below.

sbremote_path=0

NzbDrone

NzbDrone script category.

#

category that gets called for post-processing with NzbDrone.

ndCategory=tv2

NzbDrone host.

#

The ipaddress for your NzbDrone/Sonarr server. e.g For the Same system use localhost or 127.0.0.1

ndhost=localhost

NzbDrone port.

ndport=8989

NzbDrone API key.

ndapikey=

NzbDrone uses SSL (0, 1).

#

Set to 1 if using SSL, else set to 0.

ndssl=0

NzbDrone web root.

#

set this if using a reverse proxy.

ndweb_root=

NzbDrone wait_for

#

Set the number of minutes to wait after calling the renamer, to check the episode has changed status.

ndwait_for=2

NzbDrone Delete Failed Downloads (0, 1).

#

set to 1 to delete failed, or 0 to leave files in place.

nddelete_failed=0

NzbDrone and NZBGet are a different system (0, 1).

#

Enable to replace local path with the path as per the mountPoints below.

ndremote_path=0

HeadPhones

HeadPhones script category.

#

category that gets called for post-processing with HeadHones.

hpCategory=music

HeadPhones api key.

hpapikey=

HeadPhones host.

#

The ipaddress for your HeadPhones server. e.g For the Same system use localhost or 127.0.0.1

hphost=localhost

HeadPhones port.

hpport=8182

HeadPhones uses ssl (0, 1).

#

Set to 1 if using ssl, else set to 0.

hpssl=0

HeadPhones web_root

#

set this if using a reverse proxy.

hpweb_root=

HeadPhones and NZBGet are a different system (0, 1).

#

Enable to replace local path with the path as per the mountPoints below.

hpremote_path=0

Mylar

Mylar script category.

#

category that gets called for post-processing with Mylar.

myCategory=comics

Mylar host.

#

The ipaddress for your Mylar server. e.g For the Same system use localhost or 127.0.0.1

myhost=localhost

Mylar port.

myport=8090

Mylar username.

myusername=

Mylar password.

mypassword=

Mylar uses ssl (0, 1).

#

Set to 1 if using ssl, else set to 0.

myssl=0

Mylar web_root

#

set this if using a reverse proxy.

myweb_root=

Mylar wait_for

#

Set the number of minutes to wait after calling the force process, to check the issue has changed status.

myswait_for=1

Mylar and NZBGet are a different system (0, 1).

#

Enable to replace local path with the path as per the mountPoints below.

myremote_path=0

Gamez

Gamez script category.

#

category that gets called for post-processing with Gamez.

gzCategory=games

Gamez api key.

gzapikey=

Gamez host.

#

The ipaddress for your Gamez server. e.g For the Same system use localhost or 127.0.0.1

gzhost=localhost

Gamez port.

gzport=8085

Gamez uses ssl (0, 1).

#

Set to 1 if using ssl, else set to 0.

gzssl=0

Gamez library

#

move downloaded games here.

gzlibrary

Gamez web_root

#

set this if using a reverse proxy.

gzweb_root=

Gamez and NZBGet are a different system (0, 1).

#

Enable to replace local path with the path as per the mountPoints below.

gzremote_path=0

Network

Network Mount Points (Needed for remote path above)

#

Enter Mount points as LocalPath,RemotePath and separate each pair with '|'

e.g. mountPoints=/volume1/Public/,E:|/volume2/share/,\NAS\

mountPoints=

Extensions

Media Extensions

#

This is a list of media extensions that are used to verify that the download does contain valid media.

mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso,.ts

Posix

Niceness for external tasks Extractor and Transcoder.

#

Set the Niceness value for the nice command. These range from -20 (most favorable to the process) to 19 (least favorable to the process).

niceness=10

ionice scheduling class (0, 1, 2, 3).

#

Set the ionice scheduling class. 0 for none, 1 for real time, 2 for best-effort, 3 for idle.

ionice_class=2

ionice scheduling class data.

#

Set the ionice scheduling class data. This defines the class data, if the class accepts an argument. For real time and best-effort, 0-7 is valid data.

ionice_classdata=4

Transcoder

getSubs (0, 1).

#

set to 1 to download subtitles.

getSubs=0

subLanguages.

#

subLanguages. create a list of languages in the order you want them in your subtitles.

subLanguages=eng,spa,fra

Transcode (0, 1).

#

set to 1 to transcode, otherwise set to 0.

transcode=0

create a duplicate, or replace the original (0, 1).

#

set to 1 to cretae a new file or 0 to replace the original

duplicate=1

ignore extensions.

#

list of extensions that won't be transcoded.

ignoreExtensions=.avi,.mkv

outputFastStart (0,1).

#

outputFastStart. 1 will use -movflags + faststart. 0 will disable this from being used.

outputFastStart=0

outputVideoPath.

#

outputVideoPath. Set path you want transcoded videos moved to. Leave blank to disable.

outputVideoPath=

processOutput (0,1).

#

processOutput. 1 will send the outputVideoPath to SickBeard/CouchPotato. 0 will send original files.

processOutput=0

audioLanguage.

#

audioLanguage. set the 3 letter language code you want as your primary audio track.

audioLanguage=eng

allAudioLanguages (0,1).

#

allAudioLanguages. 1 will keep all audio tracks (uses AudioCodec3) where available.

allAudioLanguages=0

allSubLanguages (0,1).

#

allSubLanguages. 1 will keep all exisiting sub languages. 0 will discare those not in your list above.

allSubLanguages=0

embedSubs (0,1).

#

embedSubs. 1 will embded external sub/srt subs into your video if this is supported.

embedSubs=1

burnInSubtitle (0,1).

#

burnInSubtitle. burns the default sub language into your video (needed for players that don't support subs)

burnInSubtitle=0

extractSubs (0,1).

#

extractSubs. 1 will extract subs from the video file and save these as external srt files.

extractSubs=0

externalSubDir.

#

externalSubDir. set the directory where subs should be saved (if not the same directory as the video)

externalSubDir=

outputDefault (None, iPad, iPad-1080p, iPad-720p, Apple-TV2, iPod, iPhone, PS3, xbox, Roku-1080p, Roku-720p, Roku-480p, mkv, mp4-scene-release).

#

outputDefault. Loads default configs for the selected device. The remaining options below are ignored.

If you want to use your own profile, set None and set the remaining options below.

outputDefault=None

hwAccel (0,1).

#

hwAccel. 1 will set ffmpeg to enable hardware acceleration (this requires a recent ffmpeg).

hwAccel=0

ffmpeg output settings.

outputVideoExtension=.mp4

outputVideoCodec=libx264

VideoCodecAllow=

outputVideoPreset=medium

outputVideoFramerate=24

outputVideoBitrate=800k

outputAudioCodec=ac3

AudioCodecAllow=

outputAudioChannels=6

outputAudioBitrate=640k

outputQualityPercent=

outputAudioTrack2Codec=libfaac

AudioCodec2Allow=

outputAudioTrack2Channels=2

outputAudioTrack2Bitrate=160k

outputAudioOtherCodec=libmp3lame

AudioOtherCodecAllow=

outputAudioOtherChannels=2

outputAudioOtherBitrate=128k

outputSubtitleCodec=

WakeOnLan

use WOL (0, 1).

#

set to 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) on the host and port specified.

wolwake=0

WOL MAC

#

enter the mac address of the system to be woken.

wolmac=00:01:2e:2D:64:e1

Set the Host and Port of a server to verify system has woken.

wolhost=192.168.1.37

wolport=80

UserScript

User Script category.

#

category that gets called for post-processing with user script (accepts "UNCAT", "ALL", or a defined category).

usCategory=mine

User Script Remote Path (0,1).

#

Script calls commands on another system.

usremote_path=0

User Script extensions.

#

What extension do you want to process? Specify all the extension, or use "ALL" to process all files.

user_script_mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg

User Script Path

#

Specify the path to your custom script.

user_script_path=/nzbToMedia/userscripts/script.sh

User Script arguments.

#

Specify the argument(s) passed to script, comma separated in order.

for example FP,FN,DN, TN, TL for file path (absolute file name with path), file name, absolute directory name (with path), Torrent Name, Torrent Label/Category.

So the result is /media/test/script/script.sh FP FN DN TN TL. Add other arguments as needed eg -f, -r

user_script_param=FN

User Script Run Once (0,1).

#

Set user_script_runOnce = 0 to run for each file, or 1 to only run once (presumably on teh entire directory).

user_script_runOnce=0

User Script Success Codes.

#

Specify the successcodes returned by the user script as a comma separated list. Linux default is 0

user_script_successCodes=0

User Script Clean After (0,1).

#

Clean after? Note that delay function is used to prevent possible mistake :) Delay is intended as seconds

user_script_clean=1

User Script Delay.

#

Delay in seconds after processing.

usdelay=120

NZBGET POST-PROCESSING SCRIPT

##############################################################################

from future import print_function

import os import sys import datetime from libs.six import text_type

import core from core.autoProcess.autoProcessComics import autoProcessComics from core.autoProcess.autoProcessGames import autoProcessGames from core.autoProcess.autoProcessMovie import autoProcessMovie from core.autoProcess.autoProcessMusic import autoProcessMusic from core.autoProcess.autoProcessTV import autoProcessTV from core.nzbToMediaUtil import getDirs, extractFiles, cleanDir, update_downloadInfoStatus, get_downloadInfo, CharReplace, convert_to_ascii, get_nzoid, plex_update from core.nzbToMediaUserScript import external_script from core import logger, nzbToMediaDB

post-processing

def process(inputDirectory, inputName=None, status=0, clientAgent='manual', download_id=None, inputCategory=None, failureLink=None): if core.SAFE_MODE and inputDirectory == core.NZB_DEFAULTDIR: logger.error( 'The input directory:[{0}] is the Default Download Directory. Please configure category directories to prevent processing of other media.'.format( inputDirectory)) return [-1, ""]

if not download_id and clientAgent == 'sabnzbd':
    download_id = get_nzoid(inputName)

if clientAgent != 'manual' and not core.DOWNLOADINFO:
    logger.debug('Adding NZB download info for directory {0} to database'.format(inputDirectory))

    myDB = nzbToMediaDB.DBConnection()

    inputDirectory1 = inputDirectory
    inputName1 = inputName

    try:
        encoded, inputDirectory1 = CharReplace(inputDirectory)
        encoded, inputName1 = CharReplace(inputName)
    except:
        pass

    controlValueDict = {"input_directory": text_type(inputDirectory1)}
    newValueDict = {"input_name": text_type(inputName1),
                    "input_hash": text_type(download_id),
                    "input_id": text_type(download_id),
                    "client_agent": text_type(clientAgent),
                    "status": 0,
                    "last_update": datetime.date.today().toordinal()
                    }
    myDB.upsert("downloads", newValueDict, controlValueDict)

# auto-detect section
if inputCategory is None:
    inputCategory = 'UNCAT'
usercat = inputCategory
section = core.CFG.findsection(inputCategory).isenabled()
if section is None:
    section = core.CFG.findsection("ALL").isenabled()
    if section is None:
        logger.error(
            'Category:[{0}] is not defined or is not enabled. Please rename it or ensure it is enabled for the appropriate section in your autoProcessMedia.cfg and try again.'.format(
                inputCategory))
        return [-1, ""]
    else:
        usercat = "ALL"

if len(section) > 1:
    logger.error(
        'Category:[{0}] is not unique, {1} are using it. Please rename it or disable all other sections using the same category name in your autoProcessMedia.cfg and try again.'.format(
            inputCategory, section.keys()))
    return [-1, ""]

if section:
    sectionName = section.keys()[0]
    logger.info('Auto-detected SECTION:{0}'.format(sectionName))
else:
    logger.error("Unable to locate a section with subsection:{0} enabled in your autoProcessMedia.cfg, exiting!".format(
        inputCategory))
    return [-1, ""]

cfg = dict(core.CFG[sectionName][usercat])

extract = int(cfg.get("extract", 0))

try:
    if int(cfg.get("remote_path")) and not core.REMOTEPATHS:
        logger.error('Remote Path is enabled for {0}:{1} but no Network mount points are defined. Please check your autoProcessMedia.cfg, exiting!'.format(
            sectionName, inputCategory))
        return [-1, ""]
except:
    logger.error('Remote Path {0} is not valid for {1}:{2} Please set this to either 0 to disable or 1 to enable!'.format(
        core.get("remote_path"), sectionName, inputCategory))

inputName, inputDirectory = convert_to_ascii(inputName, inputDirectory)

if extract == 1:
    logger.debug('Checking for archives to extract in directory: {0}'.format(inputDirectory))
    extractFiles(inputDirectory)

logger.info("Calling {0}:{1} to post-process:{2}".format(sectionName, inputCategory, inputName))

if sectionName == "CouchPotato":
    result = autoProcessMovie().process(sectionName, inputDirectory, inputName, status, clientAgent, download_id,
                                        inputCategory, failureLink)
elif sectionName in ["SickBeard", "NzbDrone"]:
    result = autoProcessTV().processEpisode(sectionName, inputDirectory, inputName, status, clientAgent,
                                            download_id, inputCategory, failureLink)
elif sectionName == "HeadPhones":
    result = autoProcessMusic().process(sectionName, inputDirectory, inputName, status, clientAgent, inputCategory)
elif sectionName == "Mylar":
    result = autoProcessComics().processEpisode(sectionName, inputDirectory, inputName, status, clientAgent,
                                                inputCategory)
elif sectionName == "Gamez":
    result = autoProcessGames().process(sectionName, inputDirectory, inputName, status, clientAgent, inputCategory)
elif sectionName == 'UserScript':
    result = external_script(inputDirectory, inputName, inputCategory, section[usercat])
else:
    result = [-1, ""]

plex_update(inputCategory)

if result[0] == 0:
    if clientAgent != 'manual':
        # update download status in our DB
        update_downloadInfoStatus(inputName, 1)
    if sectionName not in ['UserScript', 'NzbDrone']:
        # cleanup our processing folders of any misc unwanted files and empty directories
        cleanDir(inputDirectory, sectionName, inputCategory)

return result

def main(args, section=None):

Initialize the config

core.initialize(section)
logger.info("#########################################################")
logger.info("## ..::[{0}]::.. ##".format(os.path.basename(__file__)))
logger.info("#########################################################")

# debug command line options
logger.debug("Options passed into nzbToMedia: {0}".format(args))

# Post-Processing Result
result = [0, ""]
status = 0

# NZBGet
if 'NZBOP_SCRIPTDIR' in os.environ:
    # Check if the script is called from nzbget 11.0 or later
    if os.environ['NZBOP_VERSION'][0:5] < '11.0':
        logger.error("NZBGet Version {0} is not supported. Please update NZBGet.".format(os.environ['NZBOP_VERSION']))
        sys.exit(core.NZBGET_POSTPROCESS_ERROR)

    logger.info("Script triggered from NZBGet Version {0}.".format(os.environ['NZBOP_VERSION']))

    # Check if the script is called from nzbget 13.0 or later
    if 'NZBPP_TOTALSTATUS' in os.environ:
        if not os.environ['NZBPP_TOTALSTATUS'] == 'SUCCESS':
            logger.info("Download failed with status {0}.".format(os.environ['NZBPP_STATUS']))
            status = 1

    else:
        # Check par status
        if os.environ['NZBPP_PARSTATUS'] == '1' or os.environ['NZBPP_PARSTATUS'] == '4':
            logger.warning("Par-repair failed, setting status \"failed\"")
            status = 1

        # Check unpack status
        if os.environ['NZBPP_UNPACKSTATUS'] == '1':
            logger.warning("Unpack failed, setting status \"failed\"")
            status = 1

        if os.environ['NZBPP_UNPACKSTATUS'] == '0' and os.environ['NZBPP_PARSTATUS'] == '0':
            # Unpack was skipped due to nzb-file properties or due to errors during par-check

            if os.environ['NZBPP_HEALTH'] < 1000:
                logger.warning(
                    "Download health is compromised and Par-check/repair disabled or no .par2 files found. Setting status \"failed\"")
                logger.info("Please check your Par-check/repair settings for future downloads.")
                status = 1

            else:
                logger.info(
                    "Par-check/repair disabled or no .par2 files found, and Unpack not required. Health is ok so handle as though download successful")
                logger.info("Please check your Par-check/repair settings for future downloads.")

    # Check for download_id to pass to CouchPotato
    download_id = ""
    failureLink = None
    if 'NZBPR_COUCHPOTATO' in os.environ:
        download_id = os.environ['NZBPR_COUCHPOTATO']
    elif 'NZBPR_DRONE' in os.environ:
        download_id = os.environ['NZBPR_DRONE']
    elif 'NZBPR_SONARR' in os.environ:
        download_id = os.environ['NZBPR_SONARR']
    if 'NZBPR__DNZB_FAILURE' in os.environ:
        failureLink = os.environ['NZBPR__DNZB_FAILURE']

    # All checks done, now launching the script.
    clientAgent = 'nzbget'
    result = process(os.environ['NZBPP_DIRECTORY'], inputName=os.environ['NZBPP_NZBNAME'], status=status,
                     clientAgent=clientAgent, download_id=download_id, inputCategory=os.environ['NZBPP_CATEGORY'],
                     failureLink=failureLink)
# SABnzbd Pre 0.7.17
elif len(args) == core.SABNZB_NO_OF_ARGUMENTS:
    # SABnzbd argv:
    # 1 The final directory of the job (full path)
    # 2 The original name of the NZB file
    # 3 Clean version of the job name (no path info and ".nzb" removed)
    # 4 Indexer's report number (if supported)
    # 5 User-defined category
    # 6 Group that the NZB was posted in e.g. alt.binaries.x
    # 7 Status of post processing. 0 = OK, 1=failed verification, 2=failed unpack, 3=1+2
    clientAgent = 'sabnzbd'
    logger.info("Script triggered from SABnzbd")
    result = process(args[1], inputName=args[2], status=args[7], inputCategory=args[5], clientAgent=clientAgent,
                     download_id='')
# SABnzbd 0.7.17+
elif len(args) >= core.SABNZB_0717_NO_OF_ARGUMENTS:
    # SABnzbd argv:
    # 1 The final directory of the job (full path)
    # 2 The original name of the NZB file
    # 3 Clean version of the job name (no path info and ".nzb" removed)
    # 4 Indexer's report number (if supported)
    # 5 User-defined category
    # 6 Group that the NZB was posted in e.g. alt.binaries.x
    # 7 Status of post processing. 0 = OK, 1=failed verification, 2=failed unpack, 3=1+2
    # 8 Failure URL
    clientAgent = 'sabnzbd'
    logger.info("Script triggered from SABnzbd 0.7.17+")
    result = process(args[1], inputName=args[2], status=args[7], inputCategory=args[5], clientAgent=clientAgent,
                     download_id='', failureLink=''.join(args[8:]))
# Generic program
elif len(args) > 5 and args[5] == 'generic':
    logger.info("Script triggered from generic program")
    result = process(args[1], inputName=args[2], inputCategory=args[3], download_id=args[4])
else:
    # Perform Manual Post-Processing
    logger.warning("Invalid number of arguments received from client, Switching to manual run mode ...")

    for section, subsections in core.SECTIONS.items():
        for subsection in subsections:
            if not core.CFG[section][subsection].isenabled():
                continue
            for dirName in getDirs(section, subsection, link='move'):
                logger.info("Starting manual run for {0}:{1} - Folder: {2}".format(section, subsection, dirName))
                logger.info("Checking database for download info for {0} ...".format(os.path.basename(dirName)))

                core.DOWNLOADINFO = get_downloadInfo(os.path.basename(dirName), 0)
                if core.DOWNLOADINFO:
                    logger.info("Found download info for {0}, "
                                "setting variables now ...".format
                                (os.path.basename(dirName)))
                    clientAgent = text_type(core.DOWNLOADINFO[0].get('client_agent', 'manual'))
                    download_id = text_type(core.DOWNLOADINFO[0].get('input_id', ''))
                else:
                    logger.info('Unable to locate download info for {0}, '
                                'continuing to try and process this release ...'.format
                                (os.path.basename(dirName)))
                    clientAgent = 'manual'
                    download_id = ''

                if clientAgent and clientAgent.lower() not in core.NZB_CLIENTS:
                    continue

                try:
                    dirName = dirName.encode(core.SYS_ENCODING)
                except UnicodeError:
                    pass
                inputName = os.path.basename(dirName)
                try:
                    inputName = inputName.encode(core.SYS_ENCODING)
                except UnicodeError:
                    pass

                results = process(dirName, inputName, 0, clientAgent=clientAgent,
                                  download_id=download_id or None, inputCategory=subsection)
                if results[0] != 0:
                    logger.error("A problem was reported when trying to perform a manual run for {0}:{1}.".format
                                 (section, subsection))
                    result = results

if result[0] == 0:
    logger.info("The {0} script completed successfully.".format(args[0]))
    if result[1]:
        print(result[1] + "!")
    if 'NZBOP_SCRIPTDIR' in os.environ:  # return code for nzbget v11
        del core.MYAPP
        return core.NZBGET_POSTPROCESS_SUCCESS
else:
    logger.error("A problem was reported in the {0} script.".format(args[0]))
    if result[1]:
        print(result[1] + "!")
    if 'NZBOP_SCRIPTDIR' in os.environ:  # return code for nzbget v11
        del core.MYAPP
        return core.NZBGET_POSTPROCESS_ERROR
del core.MYAPP
return result[0]

if name == 'main': exit(main(sys.argv)) `` Hope you can help me from here?

clinton-hall commented 7 years ago

in autoProcessMedia.cfg

[HeadPhones]
    [[muziek]]
        enabled = ""

needs to be

[HeadPhones]
    [[muziek]]
        enabled = 1
ikkeenjij36 commented 7 years ago

did that still the same issue? After some fiddling around i now get script ended with 255 category tvseries not enabled iand i now don't have a autoProcessMedia.cfg file just the autoProcessMedia.cfg.spec

ikkeenjij36 commented 7 years ago

Well solved almost completely by deleting the autprocessmedia.cfg and made the new one in order,only thing i get stuck on now is the section headphones,it processing the files in the temporary location /volume1/downloads/complete/muziek instead of replacing it to the the file /volume1/muziek any thoughts on that?

clinton-hall commented 7 years ago

Would need to see logs. But if SABnzbd downloads to/volume1/downloads/complete/muziek/ Then nzbToMedia should pass that directory over to headphones, and Headphones should rename to the media library as per headphones settings.

ikkeenjij36 commented 7 years ago

All is solved now. Sorry for the delay