AniDB O'Matic - Documentation: Local file renaming
File renaming patterns
AoM contains a comprehensive number of patterns to fully customize file names and paths. In order for the pattern to allow very complex rules it essentially allows light scripting. The path can be a complete path or a partial path, in case of a partial path the current file manager is used to place the file based on a known root or from the root folder of the file manager, see file managers below for more details. File extensions are automatically added to the end of the pattern.
Here's a few sample patterns:
- "?a - ?ep - ?e [?g]" -> 
"Anime - 02 - Episode name [Group name]" - "?a - ?epv?v - ?e?if(lg<>'', ' ['+lg+']', '')" -> 
With group: "Anime - 02v1 - Episode name [Group name]"
Without group:"Anime - 02v1 - Episode name" - "?if(wltw, 'To watch\', '')?a?if(isMovie, if(moviePartCount>1, ' - Part '+partno+if(v>1, 'v'+v, ''), if(v>1, ' - v'+v, '')), ep+if(v>1, v, '')+'- ?e') ?if(lg<>'', lg+' ', ''){?crc32}" -> 
For a movie: "Anime name - v2 [Group name]{crc32}"
For a movie with 2 parts: "Anime name - Part 2v2 [Group name]{crc32}
For a normal anime, marked as "to watch in wishlist": "To watch\Anime name - 02v2 - Episode name [Group name]{crc32} 
Custom tags
AOM still supports custom tags to simplify rules. Custom tags works as follows:
- Specified like a normal tag but in all uppercase, for example "?G".
 - If any subpart of the tag is empty, the whole tag is skipped, except:
 - If the tag contains ?if statements, these are not checked if they're empty.
 
With this you could simplify the group rule, for example you could write it:
- Using ?if: "?if(lg<>'', '['+lg+']', '')" -> "?G"
 - Simplest form: "[?lg]" -> "?G"
 - More advanced example: "?if(lg<>'', '['+lg']', if(sg<>'', '['+sg']', '[RAW]'))" -> "?G"
 
Default tags
| ?a | Anime name | 
| ?ab | Audio bitrate | 
| ?ac | Audio codec | 
| ?aid | Anime ID | 
| ?e | Episode name | 
| ?eid | Episode ID | 
| ?ep | Episode number | 
| ?ep2, ?ep3, ?ep4 | Zero padded episode number, eg ?ep3 = 007 | 
| ?fid | File ID | 
| ?fs | File source | 
| ?g | Group name, long (?lg) if available, otherwise short (?sg) | 
| ?gid | Group ID | 
| ?lang | Shows 1-2 Audio and 1-2 Subtitle languages | 
| ?la | Shows all audio languages | 
| ?la1, ?la2, ?la3, ?la4 | Shows 1-4 audio languages | 
| ?lg | Long group name | 
| ?ls | Shows all subtitle languages | 
| ?ls1, ?ls2, ?ls3, ?ls4 | Shows 1-4 subtitle languages | 
| ?mid | Mylist ID | 
| ?sg | Short group name | 
| ?v | File version | 
| ?vb | Video bitrate | 
| ?vc | Video codec | 
Note that all tags are greedy, that means that ?ep2 will always be read as ep2, never as ?e or ?ep. If you need a tag to not be greedy you can use ?out(ep).
Function tags
| ?if() | If statement. Example: ?if(a=b, 'equal', 'not equal')  | 
| ?lc() | Converts the supplied parameter to lower case. Example ?lc(crc)  | 
| ?uc() | Converts the supplied parameter to upper case. Example ?uc(crc)  |