tinyMediaManager offers a powerful renamer to rename your TV shows and all associated files to your desired folder-/filenames. While there is almost nothing you can’t do with the renamer, it has still one big restriction: you can only rename the TV shows inside its own data source. Renaming it to a destination which is not inside the own data source is not supported.
Renamer Profiles
Starting with v5.3.0, tinyMediaManager supports multiple renamer profiles for TV shows. A renamer profile bundles all rename-related settings — folder patterns, file patterns, cleanup options, and more — into a single named configuration. You can create as many profiles as you need and switch between them without having to reconfigure everything each time.
At the top of the renamer panel you will find a profile selector with the following options:
- Select an existing profile from the dropdown to switch to it
- Create a new profile (which starts as a copy of the currently selected one)
- Duplicate an existing profile to create a new one based on it
- Rename the selected profile
- Delete a profile you no longer need
When upgrading from a version prior to v5.3.0, all your existing renamer settings are automatically migrated into a new profile called “Default”. This ensures a seamless transition — nothing breaks, and your current configuration is preserved exactly as it was.
Note: Please review your renamer settings after upgrading to v5.3.0 to make sure everything was migrated correctly. All renamer-related settings have been moved to the Default profile automatically.
The Default profile also serves a special purpose: wherever tinyMediaManager needs renamer settings internally but does not give you direct control over which profile to use, the Default profile is used automatically. A good example of this is the exporter — when you export your media library to HTML or other formats, the exporter relies on certain folder and file naming patterns to locate artwork and metadata. These patterns are always taken from the Default profile, since the exporter needs a consistent configuration regardless of which renamer profile you currently have selected.
Renamer Pattern
Folder name, Season folder name and Episode filename: Choose the desired folder name(s) and filename for renaming. Here you can enter fixed parts of the name and dynamic ones. You will find a list of all available tokens for building up dynamic names beneath the settings along with examples of your media library. With leaving the folder name/filename empty, the renamer will skip the name generation for the empty part.
The renamer is built on JMTE and can profit from all options you can have in JMTE. For easier usage, we have added some preset tokens (see table below). Nevertheless you can also access every field from the movie just by using the full syntax like ${tvShow.title} or ${episode.title}.
If the preset token already contains a renderer (like ${filesize} -> ${episode.videoFilesize;filesize}), you cannot add another renderer. In this case you need to switch to the full syntax.
Available tokens
| Token | Description | Example |
|---|---|---|
| ${title} ${episode.title} |
Episode title | Pilot |
| ${originalTitle} ${episode.originalTitle} |
Episode original title | Pilot |
| ${titleSortable} ${episode.titleSortable} |
Episode title sorting (e.g. Luminous Fish Effect, The) | Pilot |
| ${originalFilename} ${episode.originalFilename} |
Filename of the episode at the first import | Pilot.avi |
| ${seasonNr} ${episode.season;number(%d)} |
Season number | 1 |
| ${seasonNr2} ${episode.season;number(%02d)} |
Season number with 2 digits | 01 |
| ${seasonNrDvd} ${episode.dvdSeason;number(%d)} |
DVD season number | 1 |
| ${seasonNrDvd2} ${episode.dvdSeason;number(%02d)} |
2 digit DVD season number | 01 |
| ${episodeNr} ${episode.episode} |
Episode number | 1 |
| ${episodeNr2} ${episode.episode;number(%02d)} |
Episode number with 2 digits | 01 |
| ${episodeNrDvd} ${episode.dvdEpisode} |
DVD episode number | 1 |
| ${episodeNrDvd2} ${episode.dvdEpisode;number(%02d)} |
2 digit DVD episode number | 01 |
| ${airedDate} ${episode.firstAired;date(yyyy-MM-dd)} |
Episode aired date (yyyy-MM-dd) | 2008-01-20 |
| ${year} ${episode.year} |
Episode Year | 2008 |
| ${episodeRating} ${episode.rating.rating} |
Episode rating | 7.1 |
| ${episodeImdb} ${episode.imdbId} |
IMDb Id | tt1234567 |
| ${episodeTmdb} ${episode.tmdbId} |
TMDB Id | 1234567 |
| ${episodeTvdb} ${episode.tvdbId} |
TVDB Id | 1234567 |
| ${episodeTags} ${episode.tags} |
Episode tags | [Tag1, Tag2] |
| ${seasonName} ${season.title} |
Season Name | My personal note |
| ${showTitle} ${tvShow.title} |
TV show title | Breaking Bad |
| ${showYear} ${tvShow.year} |
TV show Year | 2008 |
| ${showOriginalTitle} ${tvShow.originalTitle} |
TV show original title | Breaking Bad |
| ${showTitleSortable} ${tvShow.titleSortable} |
TV show title sorting (e.g. 4400, The) | Breaking Bad |
| ${showRating} ${tvShow.rating.rating} |
TV show rating | tt1234567 |
| ${showImdb} ${tvShow.imdbId} |
TV show IMDb Id | 8.5 |
| ${showTmdb} ${tvShow.tmdbId} |
TV show TMDB Id | 1234567 |
| ${showTvdb} ${tvShow.tvdbId} |
TV show TVDB Id | 1234567 |
| ${showNote} ${tvShow.note} |
TV show note | My personal note |
| ${videoResolution} ${episode.mediaInfoVideoResolution} |
Video resolution (e.g. 1280x720) | 1280x720 |
| ${aspectRatio} ${episode.mediaInfoAspectRatioAsString} |
Aspect ratio (e.g. 178) | 240 |
| ${aspectRatio2} ${episode.mediaInfoAspectRatio2AsString} |
2nd aspect ratio (e.g. 178, only for multiformat) | 178 |
| ${videoFormat} ${episode.mediaInfoVideoFormat} |
Video format (e.g. 720p) | 720p |
| ${videoCodec} ${episode.mediaInfoVideoCodec} |
Video codec (e.g. h264) | h264 |
| ${videoBitDepth} ${episode.mediaInfoVideoBitDepth} |
Video bit depth (e.g. 8 / 10) | 8 |
| ${videoBitRate} ${episode.mediaInfoVideoBitrate;bitrate} |
Video bitrate (e.g. 10.4 Mbps) | 10.4 Mbps |
| ${audioCodec} ${episode.mediaInfoAudioCodec} |
Audio codec of the first stream (e.g. AC3) | AAC |
| ${audioCodecList} ${episode.mediaInfoAudioCodecList} |
Array of all audio codecs (e.g. [AC3, MP3]) | [AAC, MP3] |
| ${audioCodecsAsString} ${episode.mediaInfoAudioCodecList;array} |
List of all audio codecs (e.g. AC3, MP3) | AAC, MP3 |
| ${audioChannels} ${episode.mediaInfoAudioChannels} |
Audio channels of the first stream (e.g. 6ch) | 6ch |
| ${audioChannelList} ${episode.mediaInfoAudioChannelList} |
Array of all audio channels (e.g. [6ch, 2ch]) | [6ch, 2ch] |
| ${audioChannelsAsString} ${episode.mediaInfoAudioChannelList;array} |
List of all audio channels (e.g. 6ch, 2ch) | 6ch, 2ch |
| ${audioLanguage} ${episode.mediaInfoAudioLanguage} |
Audio language of the first stream (e.g. EN) | en |
| ${audioLanguageList} ${episode.mediaInfoAudioLanguageList} |
Array of all audio languages (e.g. [EN, DE]) | [en, de] |
| ${audioLanguagesAsString} ${episode.mediaInfoAudioLanguageList;array} |
List of all audio languages (e.g. EN, DE) | en, de |
| ${subtitleLanguageList} ${episode.mediaInfoSubtitleLanguageList} |
Array of all subtitle languages (e.g. [EN, DE]) | [en, de] |
| ${subtitleLanguagesAsString} ${episode.mediaInfoSubtitleLanguageList;array} |
List of all subtitle | |
| languages (e.g. EN, DE) | en, de | |
| ${mediaSource} ${episode.mediaSource} |
Media source (DVD etc) | TV |
| ${3Dformat} ${episode.video3DFormat} |
3D format | 3D SBS |
| ${hdr} ${episode.videoHDRFormat} |
High Dynamic Range (HDR) | HDR |
| ${hdrformat} ${episode.videoHDRFormat} |
High Dynamic Range (HDR) Format | HDR 10 |
| ${filesize} ${episode.videoFilesize;filesize} |
File size in GB | 1.05 G |
| ${parent} ${tvShow.parent} |
Path between datasource and parent folder of the TV show | B |
| ${note} ${episode.note} |
Episode note | My personal note |
In addition to this token, all available properties of the objects itself can be used - see the JMTE docs for more information.
Renderers
You can also use some pre-built renderers to modify the result; you cannot use the preset token for the renderers to work - you need to use the full syntax:
- UPPER case renderer
upper:${tvShow.title;upper} - lower case renderer
lower:${tvShow.title;lower} - Title case renderer
title:${tvShow.title;title} - First character upper case renderer
first:${tvShow.title;first} - Array renderer
array:${tvShow.genres;array}would render all genres separated by a comma - Unique array renderer
uniqueArray:${episode.mediaInfoAudioLanguageList;uniqueArray}would render all unique audio languages separated by a comma - Date format renderer
date:${episode.firstAired;date(yyyy-MM-dd)}would cause the aired date to be formatted with a renderer named “date”. This named renderer would then be passed the format “yyyy-MM-dd” along with the variable to be rendered. - Number format renderer
number:${tvShow.ratings.imdb.rating;number(%.0f)}would format the IMDb rating (internally a float) as an integer. You need to know which number type is returned from the field - after that you can use any supported Java String.format token. - File size renderer
filesize:${episode.videofilesize;filesize(G)}to format the video filesize to the unit you want (K, KB, KiB, M, MB, MiB, G, GB, GiB are supported. G is the default if you don’t add a unit) - Replacement renderer
replace:${episode.title;replace(umlauts.csv)}would load replacement tokens from the file/data/umlauts.csvand to a search and replace of the token for every line in the csv. The csv needs to be comma separated and only the comma itself needs to be quoted with double quotes. More info at the corresponding blog post. If you just want to replace single token, you can also put it inline into the replacement renderer:${episode.title;replace(x264,h264)} - Bitrate renderer
bitrate:${episode.mediaInfoVideoBitrate;bitrate(Mbps)}to format the bitrate to the unit you want (k, kb, kbps, M, Mb, Mbps are supported. Mbps is the default if you don’t add a unit) - Framerate renderer
framerate:${episode.mediaInfoFrameRate;framerate}is used to format the framerate in a nice way. You can add the parameter(round)to round the framerate to an integer:${framerate(round)}or${episode.mediaInfoFrameRate;framerate(round)} - Split renderer
splitv5.0.8:${tvShow.genres;split(1)}would get the second entry (counting from zero) from the genres list. This renderer can also get a range of sub-items -${tvShow.genres;split(1,3)}v5.0.10 - Chaining renderer
chain: this renderer can be used to chain the output through multiple renderers. E.g.${episode.title;chain(replace(umlauts.csv);lower)}
Advanced Options
- Use the name “Specials” for season 0: When enabled, episodes belonging to season 0 (specials) will be placed in a folder named “Specials” instead of using the season number.
- Clean up “unwanted” files on rename: Removes files that are marked as “unwanted” in the file type settings during the rename process. Check your file type settings to see which file types are affected.
- Multi episode naming style: Choose how multi-episode files are named (e.g. S01E01E02, S01E01-E02, etc.).
Replacements
These options control how certain characters and patterns are replaced in folder and file names.
- Replace spaces in the TV show folder name with / Replace spaces in the season folder name with / Replace spaces in the filename with: You can replace all spaces with either underscores, dots or dashes by activating this option.
- Replace colons with: Since colons are illegal characters in folder names and filenames, tinyMediaManager offers you to choose how they should be replaced.
- Replace non ASCII characters with their basic ASCII equivalents: Some file systems might need to have ASCII conform file names — by activating this option tinyMediaManager tries to convert non ASCII characters into a similar ASCII character (e.g. Ä → Ae; ß → ss, …).
- First character number replacement: If you use the renderer
;first(like in${title;first}) and the first character would be a digit, replace the digit with the given character. - Replace forbidden filesystem characters with their Unicode equivalents: Replaces characters that are forbidden on certain file systems (like
<,>,:,",/,\,|,?,*) with visually similar Unicode characters that are file-system safe. This preserves the look and feel of the original title while staying compliant with file system rules. For more details, see the corresponding blog post.