Configuration and Presets¶
Parsec uses a TOML-based configuration system. By default, it looks for a configuration file in the following locations:
$HOME/.config/parsec/config.toml(Linux/macOS) or%AppData%\parsec\config.toml(Windows)parsec.tomlin the current working directory or the config directory.parsec.tomlin the current working directory
Managing Configuration¶
You can use the config command to manage your configuration.
Initialize Configuration¶
To create a default configuration file in the default location ($HOME/.config/parsec/config.toml), run:
View complete default config.toml
# ╔═════════════════════════════════════════╗
# ║ ____ ║
# ║ / __ \____ __________ ___ _____ ║
# ║ / /_/ / __ `/ ___/ ___/ _ \/ ___/ ║
# ║ / ____/ /_/ / / (__ ) __/ /__ ║
# ║ /_/ \__,_|_| |___/\___|\___/ ║
# ║ .: SYSTEM ADMINISTRATION :. ║
# ╚═════════════════════════════════════════╝
# Configuration documentation is available at
# https://codeberg.org/upPollo/parsec/src/branch/main/docs/config.md
# Your release group Name (should only contain alphanumeric characters and be unique)
group = "NoRealGrpPlsChange"
# Default source for releases (Value in Filename or from flag is prioritized over this setting)
source = "WEB-DL"
# Preferred language for identification, tagging, and track ordering
preferred_language = "de"
# Place original language audio tracks before preferred language tracks in track ordering
original_audio_first = false
# If true, sets {language} to preferred_language and {language_ext} to "SUBBED"
# if no audio is present but subs are available in the preferred language
subbed_tagging = true
# Naming template for releases
# for what is available see https://codeberg.org/upPollo/parsec/src/branch/main/docs/templates.md
template = '{{join "." .Title .YearTag .SeasonEpisode .Edition .EpisodeTitle .VersionTag .RepackTag .LanguageName .LanguageExtra .Accessibility .Resolution .Service .Source (when .IsRemux "REMUX") .AudioSpec .HDR .VideoCodec}}-{{.Group}}'
# Default template to use for NFO generation
nfogen_template = "default"
# Character used to replace spaces in titles, episode titles, and codecs.
word_separator = "."
# Replace diacritics and special characters with their ASCII equivalents (e.g., ä -> ae, ß -> ss)
normalize_diacritics = true
# Path where to move files after renaming (absolute or relative to cwd)
# output_path = ""
# Video codec styling matrix
# Automatically maps video codecs based on release type (web_dl, remux, encode)
# To set a default profile fallback, define a [codec_matrix.default] table or alias (e.g. default = "web_dl")
[codec_matrix]
default = "web_dl"
[codec_matrix.web_dl]
AVC = "H.264"
HEVC = "H.265"
[codec_matrix.remux]
AVC = "AVC"
HEVC = "HEVC"
[codec_matrix.encode]
AVC = "x264"
HEVC = "x265"
# Custom regex replacements applied to the Title and Episode Title before normalization.
# Replaces `title_cleaning_regex`.
[[replacements.title]]
pattern = '(?i)(\s*\|.*|\s*\((Teil|Part)\s*\d+\))'
replacement = ''
[[replacements.title]]
pattern = '&'
replacement = 'und'
[[replacements.input]]
pattern = '(?i)(Fernseh|Dokumentar|Spiel|Kurz|Animations|Maerchen|Märchen)film.*(Deutschland|Oesterreich|Österreich|Schweiz|DDR)'
replacement = ''
# Regex replacements applied to the raw filename before parsing.
# They are processed in the order they appear.
[[replacements.input]]
pattern = '(?i)(Fernseh|Dokumentar|Spiel|Kurz|Animations|Maerchen|Märchen)film.*(Deutschland|Oesterreich|Österreich|Schweiz|DDR)'
replacement = ''
# Regex replacements applied to the final generated filename string.
# [[replacements.output]]
# pattern = 'BluRay'
# replacement = 'Blu-Ray'
# Episode ordering to use when fetching episodes from TVDB for identification.
# Options: default/aired, official, dvd, absolute, alternate, regional
tvdb_order = "default"
# Remap episode numbers to a different ordering in the output filename.
# Leave unset (or same as tvdb_order) to skip remapping.
# tvdb_remap_order = "absolute"
# Api keys for Media Databases (required for most features)
[api_keys]
tmdb = "your_tmdb_api_key" # https://developer.themoviedb.org/docs/getting-started
tvdb = "your_tvdb_api_key" # https://thetvdb.com/api-information
# Optional. Used only by `correct` if a missing subtitle font is not available from
# local system fonts or the keyless Google Fonts GitHub repository.
google_fonts = "" # https://developers.google.com/fonts/docs/developer_api
# Prowlarr configuration for release searching
[prowlarr]
url = "http://localhost:9696" # e.g. http://localhost:9696
api_key = "your_prowlarr_api_key"
indexers = [] # Array of indexer IDs to limit the search (empty for all)
[update]
# Automatically check for updates in the background
check = true
# Automatically download and install updates in the background
auto = false
# Check for prerelease/nightly updates
prerelease = false
# ---------------------------------- #
# SOME EXAMPLE PRESETS #
# ---------------------------------- #
# ------------------------------------------------------------------------------
# PRESET: mandalorian
# Use case: Automatically identify a specific show without needing to parse it.
# Useful for automation or when the file name is ambiguous.
# ------------------------------------------------------------------------------
[preset.mandalorian]
description = "Mandalorian on DSNP"
title = "The Mandalorian"
tmdb_id = 82856
is_tv = true
service = "DSNP"
# source = "WEB-DL" # Doesn't need to be set since it's already set in default preset
# ------------------------------------------------------------------------------
# PRESET: remux
# Use case: High-quality BluRay Remuxes.
# ------------------------------------------------------------------------------
[preset.movie-remux]
description = "HEVC/AVC codec labels"
source = "BluRay"
codec_profile = "remux"
template = '{{join "." .Title .YearTag .Resolution .Source "REMUX" .AudioSpec .HDR .VideoCodec}}-{{.Group}}'
# ------------------------------------------------------------------------------
# PRESET: encode
# Use case: Name of the encoding library is used as the video codec.
# ------------------------------------------------------------------------------
[preset.encode]
description = "x264/x265 codec labels"
source = "BluRay"
codec_profile = "encode"
# ------------------------------------------------------------------------------
# PRESET: quick-check
# Use case: Fast validation during ingest.
# Disables some verbose and opinionated checks.
# ------------------------------------------------------------------------------
[preset.quick-check]
description = "disables verbose/opinionated checks"
disabled_checks = [
"filename_sequences",
"mediainfo_bitrate",
"matroska_track_order",
"matroska_name_quality"
]
# ------------------------------------------------------------------------------
# PRESET: tvnation
# Use case: disable all checks except for disallowed filename characters
# ------------------------------------------------------------------------------
[preset.tvnation]
description = "disable almost all checks"
enabled_checks = ["filename_characters"]
# ------------------------------------------------------------------------------
# PRESET: special
# Use case: For handling TV specials and extras.
# Enables matching title/Aired date against Season 0 for TVDB
# ------------------------------------------------------------------------------
[preset.special]
description = "TV specials and extras"
allow_special_matches = true
season = 0
is_tv = true
template = '{{join "." .Title .YearTag .SeasonEpisode .Date .EpisodeTitle .Resolution .Service .Source .VideoCodec}}-{{.Group}}'
# ------------------------------------------------------------------------------
# PRESET: anime
# Use case: Naming scheme following the parsec naming guide for anime.
# ------------------------------------------------------------------------------
[preset.anime]
description = "CRC32 brackets and spaces"
is_tv = true
word_separator = " "
template = '[{{.Group}}] {{.Title}} - {{.SeasonEpisode}} - ({{join " " .Source .Resolution .VideoCodec .AudioCodec}}){{when .IsDualAudio " Dual-Audio"}} [{{.CRC32}}]'
Validate Configuration¶
To verify your current configuration and check if API keys are set, run:
Presets¶
Presets allow you to define groups of settings that can be activated via the --preset flag. This is useful for recurring release types or specific shows.
Defining Presets¶
Presets are defined under the [preset.NAME] section. Almost all configuration options (except API keys) can be used within a preset to override global settings.
An optional description field can be added to any preset. It is displayed as a hint in shells that support completion descriptions (zsh, fish, PowerShell) when tab-completing the --preset flag.
# Global defaults
source = "WEB-DL"
group = "YourGroup"
[codec_matrix.web_dl]
AVC = "H.264"
HEVC = "H.265"
[api_keys]
tmdb = "your_tmdb_api_key"
tvdb = "your_tvdb_api_key"
google_fonts = "" # optional; only needed for missing subtitle font downloads
[preset.marvel]
description = "Pin metadata to Loki (2021)"
title = "Loki"
is_tv = true
tmdb_id = 84958
[preset.remux]
description = "AVC/HEVC codec names"
source = "BluRay"
codec_profile = "remux"
template = '{{join "." .Title .YearTag .Resolution .Source "REMUX" .VideoCodec .AudioSpec}}-{{.Group}}'
Using Presets¶
Activate a preset using the --preset flag with any command:
When a preset is active, Parsec will first look for a value in the preset's configuration. If not found, it falls back to the global configuration, and finally to the project's internal defaults.
Note: Flags provided on the command line always take precedence over configuration and presets.
Configuration Options¶
Global-only Options¶
These options can only be set at the top level of the configuration file and are not affected by presets.
| Key | Type | Description |
|---|---|---|
api_keys.tmdb |
string | API key for TMDB. |
api_keys.tvdb |
string | API key for TVDB. |
api_keys.google_fonts |
string | Optional Google Fonts Developer API key. Used by autocorrect only when a missing subtitle font is not found locally or in the keyless Google Fonts GitHub repository. |
Video Codec Matrix¶
codec_matrix defines named codec profiles — mappings from internal codec identifiers to their display strings in the generated filename.
The three built-in profiles are:
| Profile | AVC | HEVC |
|---|---|---|
web_dl |
H.264 |
H.265 |
remux |
AVC |
HEVC |
encode |
x264 |
x265 |
The active profile is selected by setting codec_profile to a profile name — either globally or within a preset. If codec_profile is not set, the default alias is used, which points to web_dl out of the box.
You can define your own named profiles alongside the built-ins:
[codec_matrix]
default = "web_dl" # built-in profiles are still available
[codec_matrix.custom]
AVC = "AVC"
HEVC = "H.265"
To use a custom profile in a preset:
| Key | Type | Description |
|---|---|---|
codec_matrix |
table | Named codec profiles. Each profile maps codec identifiers (AVC, HEVC) to display strings. |
codec_matrix.default |
string | Name of the profile to use when codec_profile is not set (default: web_dl). |
Prowlarr Settings¶
These settings are used for release searching via Prowlarr.
| Key | Type | Description |
|---|---|---|
prowlarr.url |
string | URL of your Prowlarr instance (e.g., http://localhost:9696). |
prowlarr.api_key |
string | API key for Prowlarr. |
prowlarr.indexers |
array of integers | Array of indexer IDs to limit the search (empty for all). |
prowlarr.movie_categories |
array of integers | Prowlarr categories to search for movies (default: [2000]). |
prowlarr.tv_categories |
array of integers | Prowlarr categories to search for TV shows (default: [5000]). |
Update Settings¶
These settings control the automatic update behavior of Parsec.
| Key | Type | Description |
|---|---|---|
update.check |
boolean | Automatically check for updates in the background (default: true). |
update.auto |
boolean | Automatically download and install updates silently in the background (default: false). |
update.prerelease |
boolean | Check for prerelease/nightly updates instead of just stable releases (default: false). |
Preset-aware Options¶
These options can be set globally OR within a [preset.NAME] block.
General Settings¶
| Key | Type | Description |
|---|---|---|
template |
string | The naming template used for renaming and checking. See Naming Templates for available fields, helper functions, and formatting rules. |
nfogen_template |
string | The default template used when generating NFO files with the nfogen command (default: default). |
preferred_language |
string | Preferred language code (default: de). |
original_language |
string | Override original language of the media file used in integrity checks (default: ""). |
original_audio_first |
boolean | Order original language audio tracks before preferred language tracks (default: false). |
subbed_tagging |
boolean | If there are subtitles but no audio for the preferred language (e.g. de) set language Info to GERMAN.SUBBED (default: true). |
tag_preview |
boolean | Display a simplified preview of the Matroska tags before applying them (default: true). |
codec_profile |
string | Selects the active video codec profile by name (e.g. web_dl, remux, encode). See Video Codec Matrix for details. |
word_separator |
string | The character used to replace spaces in the generated filename, such as in the Title, Episode Title, and Audio Codec names. Use " " to preserve spaces (default: . ). |
allow_special_matches |
boolean | Allow fallback matching of episodes by Air Date or Episode Title against Specials (Season 0). Prevents incorrectly matching a regular episode without season/episode numbers to a TV special (default: false). |
normalize_diacritics |
boolean | Replace diacritics and special characters with their ASCII equivalents (e.g., ä -> ae, ß -> ss) (default: true). |
output_path |
string | Output path where files should be moved after renaming. Can be absolute or relative to the current working directory. |
Regex Replacements¶
Parsec supports powerful regex replacements for input filenames, title cleaning, and output filenames. See the Regex Replacements Documentation for detailed configuration instructions and examples.
Metadata Overrides¶
These are especially useful within presets to provide missing information or override parsed data.
| Key | Type | Description |
|---|---|---|
title |
string | Title of the movie or TV show. |
original_title |
string | Original foreign or alternative title. |
year |
integer | Release year. |
season |
integer | Season number. |
episode |
integer | Episode number. |
date |
string | Episode air date (YYYY-MM-DD). |
episode_title |
string | Title of the episode. |
cut_edition |
string | Override for the release edition (e.g., Director's Cut). |
hdr |
string | Override for HDR information (e.g., HDR10, DV). |
service |
string | Streaming service (e.g., DSNP, NF). |
source |
string | Default source (e.g., WEB-DL, BluRay). |
group |
string | Default release group name. |
repack |
boolean / integer | Mark as repack (boolean or numeric level, e.g. 2 for REPACK2). |
remux |
boolean | Force identification as a REMUX. |
version_tag |
integer | Quality upgrade version iteration (e.g. 2 for v2). |
is_tv |
boolean | Force identification as a TV show. |
is_movie |
boolean | Force identification as a movie. |
Database IDs¶
Provide specific IDs to ensure the correct metadata is fetched from databases.
| Key | Type | Description |
|---|---|---|
imdb_id |
string | IMDb ID (e.g., tt1234567). |
tmdb_id |
integer | TMDB ID. |
tvdb_id |
integer | TVDB ID. |
tvdb_order |
string | Episode ordering to use when querying TVDB for identification (default/aired, official, dvd, absolute, alternate, regional; default: default). |
tvdb_remap_order |
string | Remap matched episodes to a different ordering in the generated output filename (e.g., identify using dvd order, but rename to absolute order). Leave unset or empty to disable remapping (default: ""). |
Check Control¶
You can enable or disable specific quality checks on a per-preset basis. See Validation Checks for more details about what checks are availible
This setting is also respected by the autocorrect command: a disabled check is neither reported nor auto-fixed.
| Key | Type | Description |
|---|---|---|
enabled_checks |
array of strings | If set, only the listed checks will be performed. Use ["all"] to enable all possible checks. |
disabled_checks |
array of strings | Listed checks will be skipped. (Ignored if enabled_checks is set) |
The checks disabled by default are:
matroska_subtitle_inline_fonts, matroska_srt_validation, matroska_ass_events, matroska_ass_unused_styles, matroska_creation_time_privacy and matroska_chapters_existence
Available Checks¶
filename_characters: Check for disallowed characters in filename.filename_sequences: Check for disallowed character sequences (e.g.,..).filename_generation_mismatch: Warn if the current filename does not match the generated name from template.mediainfo_interlaced_web: Warn if WEB source is interlaced.mediainfo_framerate: Check for non-standard framerates.mediainfo_bitrate: Check for low bitrates.mediainfo_durations: Check for inconsistent track durations.mediainfo_redundant_audio: Check for redundant audio tracks.mediainfo_resolution: Check for non-standard resolutions.mediainfo_dialogue_normalization: Check for dialogue normalization in lossless audio tracks.mediainfo_stereo_lossless: Warn if an audio track with 2 or less channels uses a different lossless codec than FLAC.mediainfo_empty_tracks: Warn (with error severity) if an audio track has zero channels or a subtitle track has zero elements.mediainfo_missing_statistics: Warn if a track is missing statistics tags.mediainfo_fixed_gop: Warn if video has a fixed GOP length with an encoder tag (x264/x265) in the filename.matroska_track_order: Verify track ordering rules.matroska_language_tag: Verify valid ISO language tags on tracks.matroska_multi_lang: Ensure 'mul' tracks have at least two full language names.matroska_original_language: Verify consistent OriginalLanguage flag.matroska_name_quality: Check for junk keywords (STEREO, ENCODED, etc.).matroska_name_codecs: Detect simple codecs (AC3, AAC, DTS) in track names.matroska_name_redundant_lang: Detect redundant language names (matching track tag).matroska_name_keywords: Ensure names match flags (SDH, Forced, AD, etc.).matroska_duplicate_tracks: Identify identical tracks.matroska_default_flags: Ensure specialized tracks (Forced, SDH, etc.) are NOT default and standard tracks have correct default flags.matroska_subtitle_format: Verify SRT or ASS requirement for text subtitles.matroska_subtitle_fonts: Ensure all fonts used in SubStationAlpha subtitles are attached.matroska_subtitle_inline_fonts: Verify fonts used in inline tags (slow).matroska_unused_fonts: Identifies font attachments that are not used by any subtitle track.matroska_font_filename_compliance: Verify that font attachment filenames match their internal names.matroska_ass_script_info: Verify ASS Script Info headers.matroska_ass_styles: Deep validation of ASS styles.matroska_ass_events: Validation of ASS event lines.matroska_ass_unused_styles: Identifies styles defined but never used in events.matroska_zlib_compression: Detect tracks using zlib compression.matroska_track_delay: Warn if a track has container delay exceeding ±1001ms (excluding TrueHD audio).matroska_video_cropping: Warn if resolution-based black bars are detected but no MKV crop values are set.matroska_title_hygiene: Verify container title doesn't contain technical metadata noise.matroska_app_hygiene: Verify writing application metadata is clean of local paths/UUIDs.matroska_data_layout: Verify that the Info and Tracks Elements are placed before the first Cluster.matroska_commentary_channels: Warn if a commentary audio track has more than 2 channels.matroska_commentary_bitrate: Warn if a commentary audio track has a bitrate exceeding 128 kbps.matroska_commentary_prefix: Verify commentary track names start with a standard prefix.matroska_commentary_pairing: Verify that subtitle commentary tracks have a corresponding audio commentary track.matroska_truehd_compatibility: Verify Dolby TrueHD tracks are followed by a lossy compatibility track (AC3/E-AC3) in the same language.matroska_chapters_existence: Verify that there is at least one chapter in the file (Disabled by default).matroska_chapters_start_non_zero: Verify that the first chapter starts at exactly 00:00:00.000.matroska_chapters_non_monotonic: Verify that chapter start times are strictly increasing.matroska_chapters_duplicate: Check for duplicate chapter timestamps.matroska_chapters_too_close: Warn if consecutive chapters are less than 10 seconds apart.matroska_chapters_exceed_duration: Verify that no chapter start time exceeds the total video duration.matroska_chapters_name_hygiene: Flags missing/whitespace-only names or consecutive duplicate names.matroska_chapters_language_hygiene: Flags undetermined (und) or missing display languages, or inconsistent languages.matroska_chapters_keyframe_alignment: Verify that chapter timestamps align with video keyframes (seek points) using the container's Cues index.filename_year_missing: Ensure movies have a year tag.filename_year_redundant: Check for redundant year tags in series.filename_streaming: Check for service tags on WEB sources.filename_tv_special: Check required tags for TV Specials.mdb_title: Verify title against TMDB/TVDB.mdb_movie_year: Verify movie release year.mdb_series_year: Verify series start year.mdb_unknown_original_lang: Warn if the original language is missing or unrecognized by MDB.mdb_unwanted_audio_lang: Flag audio tracks in languages other than preferred/original.mdb_episode_existence: Check if episode exists in database.mdb_episode_title: Verify episode title.mdb_episode_date: Verify episode air date.mdb_runtime: Verify video duration matches expected TMDB/TVDB runtime.mdb_title_type_mismatch: Warn if the file's movie/TV packaging contradicts the title type from IMDb/TMDB.mdb_track_languages: Verify presence of preferred and original language tracks.
Examples¶
Blacklisting (Disable specific checks globally)
# Skip bitrate and resolution warnings by default
disabled_checks = ["mediainfo_bitrate", "mediainfo_resolution"]
Whitelisting (Enable only specific checks in a preset)
[preset.fast]
# For this preset, skip everything EXCEPT filename and track order
enabled_checks = ["filename_characters", "matroska_track_order"]
Overriding global settings in a preset