video_utils.videotagger package
Subpackages
- video_utils.videotagger.api package
- Submodules
- video_utils.videotagger.api.keys module
- video_utils.videotagger.api.utils module
- Module contents
BaseAPIBaseAPI.TIMEOUTBaseAPI.TMDb_URLBaseBaseAPI.TMDb_URLEpisodeBaseAPI.TMDb_URLFindBaseAPI.TMDb_URLImageBaseAPI.TMDb_URLMovieBaseAPI.TMDb_URLPersonBaseAPI.TMDb_URLSearchBaseAPI.TMDb_URLSeasonBaseAPI.TMDb_URLSeriesBaseAPI.TVDb_URLBaseBaseAPI.TVDb_URLEpisodeBaseAPI.TVDb_URLImageBaseAPI.TVDb_URLMovieBaseAPI.TVDb_URLSearchBaseAPI.TVDb_URLSeriesBaseAPI.tvdb
Submodules
video_utils.videotagger.base_item module
Base class for metadata objects
- class video_utils.videotagger.base_item.BaseItem(*args, data=None, version=None, **kwargs)
Bases:
BaseAPIExtends the BaseAPI class for use in Episdode, Movie, Person, etc.
- addComment(text)
Add a user comment to metadata information
- Parameters:
text (str) – Comment to add
- Keyword Arguments:
None –
- Returns:
None
- get(*args)
Get value of key from data dict
- getExtra(*args)
Method to get extra information from an api
- Parameters:
*args (list) – Keys for API call
- Keyword Arguments:
None –
- Returns:
Extra information
- Return type:
dict
- getID(external: str | None = None, **kwargs) str | None
Method to get ID of object, or external ID of object
- Parameters:
None –
- Keyword Arguments:
external (str) – Set to external ID key. Will return None if not found
**kwargs – Various accepted, none used
- Returns:
Return the item ID or None if not found
- getIDPlex(**kwargs)
Get ID of object or external ID of object in Plex standard format
The Plex format for the ID is “{source-ID}” where source is tmdb, tvdb, or imdb and ID is the ID; imdb IDs begin with tt.
- Parameters:
None –
- Keyword Arguments:
**kwargs – All keywords accepted by getID()
- Returns:
Return the item ID or None if not found
- property isEpisode
Identifies object as episode
- Type:
bool
- property isExtra
Identifies object as extra
- Type:
bool
- property isMovie
Identifies object as movie
- Type:
bool
- property isPerson
Identifies object as person
- Type:
bool
- property isSeries
Identifies object as TV series
- Type:
bool
- keys()
Return keys from the data dict
- metadata(**kwargs)
Method to get metadata in internal, standard format
- Parameters:
None –
- Keyword Arguments:
**kwargs –
- Returns:
Metadata in internal, standard format
- Return type:
dict
- pop(key, *args)
Pop off a key from the data dict
- setVersion(version)
Set version of file (i.e., Extended Edition); only valid for movies.
- Parameters:
version (str) – Movie version
- Keyword Arguments:
None –
- Returns:
None
- write_tags(fpath, **kwargs)
” Method to write metadata to file
- Parameters:
fpath (str) – Path to video file to write metadata to
- Keyword Arguments:
**kwargs –
- Returns:
True if tags written, False otherwise
- Return type:
bool
video_utils.videotagger.episode module
Classes for episode information
- class video_utils.videotagger.episode.BaseEpisode(*args, **kwargs)
Bases:
BaseItemBase object for episode information from TMDb or TVDb
Provides methods that are used in both TMDbEpisode and TVDbEpisode objects for cleaner code.
- get_basename(**kwargs) str
Get file name in semi-Plex convention
This method returns file name in semi-Plex convention for the given episode based on season/episode number and name. The series ID from whichever database the metadata were obtained is included. Note that the series name is NOT included.
Example
>>> ep = Episode.TVDbEpisode(269782, 1, 1) >>> print(ep.get_basename()) 'S01E01 - Pilot.tvdb269782'
- Parameters:
None –
- Keyword Arguments:
**kwargs – Any accepted, all ignored
- Returns:
File name in semi-Plex convention
- Return type:
str
- get_dirname(root: str = '') str
Get directory structure in Plex convention
This method returns directory structure in the Plex convention for the given episode based on series name and season.
Example
>>> ep = Episode.TVDbEpisode(269782, 1, 1) >>> print(ep.get_dirname()) 'TV Shows/Friends with Better Lives (2014)/Season 01'
- Parameters:
None –
- Keyword Arguments:
root (str) – Root directory, is prepended to path
- Returns:
Directory structure in Plex convention
- Return type:
str
- class video_utils.videotagger.episode.TMDbEpisode(*args, **kwargs)
Bases:
BaseEpisodeObject for episode information from TMDb
- EXTRA = ['external_ids', 'credits']
- class video_utils.videotagger.episode.TVDbEpisode(*args, **kwargs)
Bases:
BaseEpisodeObject for episode information from TVDb
- video_utils.videotagger.episode.get_basename(seasonNum: int, episodeNum: int, title: str, ID: str = '', **kwargs) str
Helper function for getting basename
This function is used for generating basenames from both TMDbEpisode and TVDbEpisode so that names can be truncated to 50 characters and invalid characters can be replaced
- Parameters:
seasonNum (int) – Episode season number
episodeNum (int) – Episode number
title (str) – Episode title
- Keyword Arguments:
ID (str) – Series ID
**kwargs – Passed to the
video_utils.videotagger.utils.replace_chars()function
- Returns:
Episode base name
- Return type:
str
- video_utils.videotagger.episode.to_list(arg) list
Convert variable to a list
- Parameters:
arg – convert argument to a list
video_utils.videotagger.gui module
video_utils.videotagger.movie module
Classes for movie information
- class video_utils.videotagger.movie.BaseMovie(*args, **kwargs)
Bases:
BaseItemBase object for movie information from TMDb or TVDb
Provides methods that are used in both TMDbMovie and TVDbMovie objects for cleaner code
- get_basename(**kwargs)
Get file name in Plex convention
This method returns file name in Plex convetion for given movie based on movie title and release year. The movie version and database ID from whichever database the metadata were obtained is incluced.
Example
>>> movie = Movie.TMDbMovie(435) >>> print(movie.get_basename()) 'The Day After Tomorrow (2004)..tmdb435'
>>> movie = Movie.TMDbMovie(435) >>> movie.setVersion('Extended Edition') >>> print(movie.get_basename()) 'The Day After Tomorrow (2004).Extended Edition.tmdb435'
- Parameters:
None –
- Keyword Arguments:
**kwargs – Passed to replace_chars() function
- Returns:
File nam in Plex convention
- Return type:
str
- get_dirname(root='')
Get directory structure in Plex convention
This method returns directory structure in Plex convetion for given movie based on movie title and release year.
Example
>>> movie = Movie.TMDbMovie(435) >>> print(movie.get_dirname()) 'Movies/The Day After Tomorrow (2004)'
- Parameters:
None –
- Keyword Arguments:
root (str) – Root directory, is prepended to path
- Returns:
Directory structure in Plex convention
- Return type:
str
- class video_utils.videotagger.movie.TMDbMovie(*args, **kwargs)
Bases:
BaseMovieObject for movie information from TMDb
- EXTRA = ['external_ids', 'credits', 'content_ratings', 'release_dates']
- class video_utils.videotagger.movie.TVDbMovie(*args, **kwargs)
Bases:
BaseMovieObject for movie information from TVDb
- EXTRA = ['external_ids', 'credits', 'content_ratings']
- video_utils.videotagger.movie.get_basename(title: str, year: int | None = None, version: str = '', ID: str = '', isExtra: bool = False, **kwargs) str
Helper function for getting basename
This function is used for generating basenames from both TMDbMovie and TVDbMovie so that title can be truncated to 50 characters, version truncated to 20 characters, and invalid characters can be replaced.
- Parameters:
title (str) – Movie title
- Keyword Arguments:
year (int) – Release year of movie
version (str) – Movie version; e.g., Extended Edition, Unrated
ID (str) – Movie ID
isExtra (bool) –
**kwargs – Passed to the
video_utils.videotagger.utils.replace_chars()function
- Returns:
Movie base name
- Return type:
str
video_utils.videotagger.parsers module
Parsers for metadata from TVDb and TMDb
- video_utils.videotagger.parsers.characters_to_credits(info: dict) dict
Convert characters to credits dict
TVDb v4 API uses the ‘characters’ tag to store information for all cast and crew for a series (or episode). This method acts to convert that into the ‘credits’ dict as expected from the v3 API and TMDb for consistency.
- video_utils.videotagger.parsers.image_paths(info, **kwargs)
Build paths to poster/cover/banner/fanart images
- video_utils.videotagger.parsers.parse_credits(info, **kwargs)
Function to parse credits into Person objects
- Parameters:
info (dict) – Data from an API call
- Keyword argumetns:
None.
- Returns:
Updated dictionary
- Return type:
dict
- video_utils.videotagger.parsers.parse_info(info, **kwargs)
Wrapper function for parsing/standardizing data
- Parameters:
info (dict) – Data from API request
- Keyword Arguments:
**kwargs –
- Returns:
Data from input, but parsed to standardized format
- Return type:
dict
- video_utils.videotagger.parsers.parse_releases(info, **kwargs)
Parse release information from TMDb
- video_utils.videotagger.parsers.standardize(info, **kwargs)
Standardize TVDb and TMDb to internal tag convention; similar to TMDb
- Parameters:
info (dict) – Data from API request
- Keyword Arguments:
**kwargs –
- Returns:
Data from input, but converted to standardized tags
- Return type:
dict
- video_utils.videotagger.parsers.tvdb2tmdb(info)
Convert TVDb data to TMDb for consistent parsing
- Parameters:
info (dict) – Data from API request
- Keyword Arguments:
None. –
- Returns:
Keys modified from TVDb to TMDb
- Return type:
dict
video_utils.videotagger.person module
Class for metadata about person
video_utils.videotagger.readers module
To read metadata from MP4 and MKV files
- video_utils.videotagger.readers.mkv_reader(file_path)
Read metadata from MKV file and parse into ‘internal’ format
- Parameters:
file_path (str) – Path to MKV file to extract metadata from
- Keyword Arguments:
None. –
- Returns:
Dictionary containing metadata if found, otherwise, emtpy dict
- Return type:
dict
- video_utils.videotagger.readers.mp4_reader(file_path)
Read metadata from MP4 file and parse into ‘internal’ format
- Parameters:
file_path (str) – Path to MP4 file to extract metadata from
- Keyword Arguments:
None –
- Returns:
Dictionary containing metadata if found, otherwise, emtpy dict
- Return type:
dict
video_utils.videotagger.series module
Classes for Series objects
- class video_utils.videotagger.series.BaseSeries(*args, **kwargs)
Bases:
BaseItemBase class for TMDb and TVDb Series
- class video_utils.videotagger.series.TMDbSeries(*args, **kwargs)
Bases:
BaseSeriesFor TMDb Series objects
- EXTRA = ['external_ids', 'content_ratings']
- class video_utils.videotagger.series.TVDbSeries(*args, **kwargs)
Bases:
BaseSeriesFor TVDb Series objects
- static sort_series(info: dict, key: str = 'seasons') dict
video_utils.videotagger.utils module
Utilities for video tagging
- video_utils.videotagger.utils.add_text(fpath_data, text)
Add text to image object
This function adds a text string to a pillow Image object
- Parameters:
fpath_data (file, bytes) – Path to a file to read in or bytes of file
text (str) – String to add to image
- Keyword Arguments:
None –
- Returns:
Image data
- Return type:
bytes
- video_utils.videotagger.utils.download(url)
Download data from URL
- Parameters:
url (str) – Full URL of data to download
- Keyword Arguments:
None. –
- Returns:
Data downloaded from file; None if failed
- Return type:
bytes
- video_utils.videotagger.utils.download_cover(video_path, url, text=None)
Wrapper function to download artwork and add version text
- Parameters:
video_path (str) – Path to video file artwork is for
url (str) – URL of artwork to download
- Keyword Arguments:
text (str) – Text to add to artwork; typically is movie version
- Returns:
Path to downloaded image on local disc, and bytes for image data
- Return type:
tuple
- video_utils.videotagger.utils.get_font(text, bbox)
Determine font size for movie version
This function determines the font size to use when adding movie version information to a poster. The font size is determined by iteratively increasing the font size until the text will no longer fit inside the specified box. The font size is the decremented slightly to ensure it fits. Space is also added between letters to ensure that the text spans most of the box horizontally.
- Parameters:
text (str) – Text to add to the movie poster
bbox (iterable) – Dimensions of the box (width,height) to write text in
- Keyword Arguments:
None –
- Returns:
- Input text (may be updated with extra space between characters)
and a pillow ImageFont font object.
- Return type:
tuple
- video_utils.videotagger.utils.is_id(db_id)
Check to ensure the db_id is valid db_id
- video_utils.videotagger.utils.replace_chars(*args, repl: str = ' ', **kwargs) str | list[str]
Replace invalid path characters; ‘&’ replaced with ‘and’
- Parameters:
*args (str) – String(s) to replace characters in
- Keyword Arguments:
repl (str) – String to replace bad characters with; default is space (’ ‘)
**kwargs –
- Returns:
String, or list, with bad values replaced by repl value
video_utils.videotagger.writers module
To write metadata to MP4/MKV files
- video_utils.videotagger.writers.add_tag(ele, key, val) None
Add a tag to XML element for MKV tagging
- Parameters:
ele – Element to add tag to
key – Tag name to add
val – Value of the tag
- Keyword Arguments:
None. –
- Returns:
None
- video_utils.videotagger.writers.add_target(ele, level)
Add a target level to the XML file from MKV tagging
- Parameters:
ele – Element to add tag to
level – Level of the tag
- Keyword Arguments:
None. –
- Returns:
An ElementTree SubElement instance
- video_utils.videotagger.writers.delete_attachments(fpath: str, nremove: int = 10) None
Delete a bunch of attachments in an MKV file
- Parameters:
fpath (str) – Full path to file
- Keywords:
nremove (int): Number of attachments to try to delete
- Returns:
None
- video_utils.videotagger.writers.get_version(metadata)
Extract version from meta data
- Parameters:
metadata (dict) – Metadata for file
- Returns:
The version of the file
- Return type:
str
- video_utils.videotagger.writers.mkv_tagger(fpath: str, metadata: dict) int
Parse information from the IMDbPY API and write Tag data to MP4 files.
- Parameters:
fpath (str) – Full path of file to write metadata to.
metadata (dict) – Meta data where keys are internal metadata keys and values are metadata values
- Keyword Arguments:
None. –
- Returns:
- Returns following values based on completion.
0 : Completed successfully.
1 : Input was NOT and MKV
2 : IMDb ID was not valid
3 : Failed to download information from IMDb AND themoviedb.org
4 : Writing tags is NOT possible
5 : Failed when trying to remove tags from file.
6 : Failed when trying to write tags to file.
10 : IMDbPY not installed AND getTMDb_Info failed to import
11 : File is too large.
- Return type:
int
- video_utils.videotagger.writers.mp4_tagger(fpath: str, metadata: dict) int
Parse information from the IMDbPY API and write Tag data to MP4 files.
- Parameters:
fpath (str) – Full path of file to write metadata to.
metadata (dict) – Dictionary of meta data where keys are internal metadata keys and values are metadata values
- Keyword Arguments:
None –
- Returns:
- Returns following values based on completion.
0 : Completed successfully.
1 : Input was NOT and MP4
2 : IMDb ID was not valid
3 : Failed to download information from IMDb AND themoviedb.org
4 : Writing tags is NOT possible
5 : Failed when trying to remove tags from file.
6 : Failed when trying to write tags to file.
10 : IMDbPY not installed AND getTMDb_Info failed to import
11 : File is too large
- Return type:
int
- video_utils.videotagger.writers.to_mkv(metadata: dict) dict
Convert internal tags to MKV tags
- Parameters:
metadata (dict) – Metadata returned by a TVDb or TMDb movie or episde object
- Keyword Arguments:
None. –
- Returns:
Dictionary with valid MKV tag level and tags as keys
- Return type:
dict
- video_utils.videotagger.writers.to_mp4(metadata: dict) dict
Convert internal tags to MP4 tags
- Parameters:
metadata (dict) – Metadata returned by a TVDb or TMDb movie or episde object
- Keyword Arguments:
None. –
- Returns:
Valid MP4 tags as keys and correctly encoded values
- Return type:
dict
- video_utils.videotagger.writers.write_tags(fpath: str, metadata: dict, **kwargs) bool
Wrapper for mp4_tagger and mkv_tagger
- Parameters:
fpath (str) – Full path of file to write tags to
metadata (dict) – Dictionary with tag/values to write
- Keyword argumetns:
**kwargs : Silently ignored
- Returns:
True if tags written, False otherwise
- Return type:
bool
Module contents
Tag video files
Download and write metadata to video files from TMDb or TVDb
- class video_utils.videotagger.TMDb(*args, **kwargs)
Bases:
BaseAPIClass for high-level interaction with TMDb API
- byIMDb(IMDbID, **kwargs)
Search TMDb for a given Movie or TV episode using IMDb ID
- search(title: str | None = None, episode: str | None = None, seasonEp: tuple[int] | None = None, year: int | None = None, page: int | None = None, **kwargs)
Search TMDb for a given Movie or TV episode
- Keyword Arguments:
title (str) – Title of movie OR title of TV Series
episode (str) – Title of TV series episode
seasonEp (tuple) – The season and episode number of the TV series episode
- class video_utils.videotagger.TVDb(*args, **kwargs)
Bases:
BaseAPIClass for high-level interaction with TMDb API
- byIMDb(IMDbID, season=None, episode=None, **kwargs)
Search TVDb for a given Movie or TV episode using IMDb series ID
- search(title: str | None = None, kind: str | None = None, episode=None, seasonEp=None, year=None, dvdOrder=None, page=None, nresults=10, **kwargs)
Search TVDb for a given Movie or TV episode
- video_utils.videotagger.compare_aired_dvd(title, year, season_ep, episode, aired, dvd)
Compare aired and dvd order
- Parameters:
title (str) – Title of the series/movie
year (int) – Release year of the series/movie
season_ep (list) – The [season #, episode #] for the series/movie. Will be None is determined to be movie.
episode (str) – Name of the episode of the series. Will be None is determined to be movie.
aired (list) – List of aired-order results returned from search
dvd (list) – List of dvd-order results fretruend from search
- video_utils.videotagger.getMetaData(fpath=None, dbID=None, seasonEp=None, version='', **kwargs)
Get Movie or Episode object based on information from file name or dbID
- Parameters:
None –
- Keyword Arguments:
fpath (str) – Full path, or base name of file to get information for. MUST match naming conventions
dbID (str) – TVDb or TMDb to use for file; overrides any information parsed from file name
seasonEP (tuple,list) – Season and episode number
version (str) – Version for movie; e.g., Extended Edition
- Returns:
A TMDbMovie, TMDbEpisode, TVDbMovie, or TVDbEpisode object