SABnzbd

Wiki

Incorrect or missing information? Pre-queue scripts

You can choose to let SABnzbd run a script just before an NZB enters the queue. This script will tell whether the NZB should be accepted or not and can modify some parameters.

Scripts can be Python scripts, bash scripts and BAT scripts. All scripts must be located in the scripts-directory, that can be specified in Config->Folders. Furthermore, the script must be executable. On Linux this means the x-bit must be on. On Windows, the requirement is that the script's extension is listed in your system's PATHEXT environment variable.

The script must write results to the console. Exit code 0 will make SABnzbd inspect the returned output. If the script has an exit code other than 0, it's assumed the script failed, and the NZB will be accepted without changes.


Input parameters

All parameters (except 1) can be empty, meaning a default value. Use %1 in Windows scripts and $1 in Unix scripts. Note that on Windows the input parameters are surrounded by quotes (e.g. "job name").

Much more information is available to scripts via environment variables, see below!

Position Description
1 Name of the NZB (no path, no ".nzb")
2 Post Processing (PP) flags:
  • 0 = Download
  • 1 = +Repair
  • 2 = +Unpack
  • 3 = +Delete
3 Category
4 Script (no path)
5 Priority
  • -100 = Default
  • -2 = Paused
  • -1 = Low
  • 0 = Normal
  • 1 = High
  • 2 = Force
6 Size of the download (in bytes)
7 Group list (separated by spaces)
8 Show name
9 Season (1..99)
10 Episode (1..99)
11 Episode name

Return parameters

The script can refuse or accept the NZB and it can also return alternative parameters. These parameters should be written to the console, each parameter on a separate line. SABnzbd uses the first 7 lines of output, so they should only contain proper data (or be empty). Anything after line 7 is ignored.

When you want to manipulate the show/season/episode parameters, you should assemble a new name and return a recognized format.

Position Description
1
  • 0 = Refuse
  • 1 = Accept
  • 2 = Accept but fail, this way post-processing scripts for the job will be activated if necessary.
2 Name of the NZB (no path, no ".nzb")
3 Post Processing (PP) flags:
  • 0 = Download
  • 1 = +Repair
  • 2 = +Unpack
  • 3 = +Delete
4 Category
5 Script (no path)
6 Priority
  • -100 = Default
  • -2 = Paused
  • -1 = Low
  • 0 = Normal
  • 1 = High
  • 2 = Force
7 Group to be used (in case your provider doesn't carry all groups and there are multiple groups in the NZB)

Enviroment variables

v2.3.5+ Enviroment variables were added in SABnzbd 2.3.5.

Your script can get extra information via environment variables (return information should still be send as plain output):

Position Description
SAB_SCRIPT The name of the current script
SAB_FINAL_NAME The name of the job in the queue and of the final folder
SAB_FILENAME The NZB filename (after grabbing from the URL)
SAB_CAT What category was assigned
SAB_BYTES Total number of bytes
SAB_DUPLICATE Was it detected as duplicate
SAB_PASSWORD What was the password supplied by the NZB or the user
SAB_STATUS Current status (completed/failed/running)
SAB_PP What post-processing was activated (download/repair/unpack/delete)
SAB_REPAIR Was repair selected by user
SAB_UNPACK Was unpack selected by user
SAB_PRIORITY Priority set by user
SAB_GROUPS Newsgroups listed in the NZB
SAB_VERSION The version of SABnzbd used
SAB_PROGRAM_DIR The directory where the current SABnzbd instance is located
SAB_PAR2_COMMAND The path to the par2 command on the system that SABnzbd uses
SAB_MULTIPAR_COMMAND Windows-only (empty on other systems). The path to the MultiPar command on the system that SABnzbd uses
SAB_RAR_COMMAND The path to the unrar command on the system that SABnzbd uses
SAB_ZIP_COMMAND The path to the unzip command on the system that SABnzbd uses
SAB_7ZIP_COMMAND The path to the 7z command on the system that SABnzbd uses. Not all systems have 7zip installed (it's optional for SABnzbd), so this can also be empty

Example Script 1

Example of a Windows batch file that forces high priority on anything smaller than 2GB.

@echo off
echo 1
echo.
echo.
echo.
echo.
if %6 LSS 2000000000 echo 1

Save it as file size-checker.cmd and put in the scripts folder.

Example Script 2

A python script to set prio to Force on downloads smaller than 50MB:

import sys

try:
    (scriptname, nzbname, postprocflags, category, script, prio, downloadsize, grouplist, showname, season, episodenumber, episodename) = sys.argv
    downloadsize = int(downloadsize)
except:
    sys.exit(1)    # exit with 1 causes SABnzbd to ignore the output of this script

prio = -100    # Default
if downloadsize > 50111222:
    prio = 2

print "1"    # Accept
print
print
print
print
print prio
print
# 0 means OK
sys.exit(0)