WebAOM (Web Anime-O-Matic) is a Java desktop application that hashes anime files and adds them to your MyList on AniDB. It retrieves metadata via the UDP API and can automatically rename and organize your collection.
- Multi-algorithm file hashing (ED2K, MD5, SHA-1, CRC32, Tiger Tree Hash)
- AniDB MyList integration with automatic metadata retrieval
- Rule-based file renaming and moving using customizable templates
- Drag-and-drop file processing with concurrent hashing
- Optional database backend (SQLite embedded, PostgreSQL, or MySQL)
- Encrypted and compressed UDP communication
- AniDB account (required)
- Java 21+ (for JAR files) or use native packages
Download pre-built packages from the Releases page:
| Platform | Package |
|---|---|
| macOS | WebAOM-2.5.0.dmg |
| Windows | WebAOM-2.5.0.msi |
| Linux | WebAOM-2.5.0-x86_64.AppImage |
| Linux | webaom_2.5.0_amd64.deb (Debian) |
macOS users: The app is not notarized. Right-click → Open, or run
xattr -cr /Applications/WebAOM.app
Requires Java 21+:
# Lite (SQLite only, ~18MB) - recommended for most users
java -jar webaom-2.5.0-lite.jar
# Full (SQLite + PostgreSQL + MySQL, ~22MB)
java -jar webaom-2.5.0-full.jar- Add files — Drag-and-drop, click "Files..." or "Folders...", or set default directories in Options
- Log in — Click "Login" and enter your AniDB credentials
- Start — Click "Start" and WebAOM will hash each file, fetch metadata from AniDB, add it to your MyList, and optionally rename/move it based on your rules
The command-line interface uses the same configuration, database, credentials, extensions, and rules as the desktop application.
The CLI is included in the lite and full JARs. Use the lite JAR with SQLite or the full JAR with PostgreSQL or MySQL:
java -jar webaom-2.6.0-lite.jar --help
java -jar webaom-2.6.0-full.jar --helpSettings are stored in the platform app-data directory (UTF-8):
- Linux:
~/.config/webaom - macOS:
~/Library/Application Support/webaom - Windows:
%APPDATA%\\webaom
Key options include:
- Connection: AniDB host, ports, keep-alive, delay between requests (minimum 2 sec, 3 recommended)
- File Options: MyList state, source, storage, watched status
- Hash Functions: Select which algorithms to compute (ED2K is required)
- Wanted Extensions: File types to process (default: avi, ogm, mkv, mp4, and many more)
WebAOM uses a scripting system to rename and move files based on metadata. Rules are defined in the Rules tab.
Example rename script:
IF A(Naruto) DO FAIL // Skip Naruto files
DO ADD '%eng (%ann) - %enr - %epn ' // Base format
IF D(japanese);S(english) DO ADD '(SUB)' // Add (SUB) for English subs
IF G(!unknown) DO ADD '[%grp]' // Add group if known
DO ADD '(%CRC)' // Always add CRC
Example move script:
IF R(DVD,HKDVD) DO ADD 'M:\dvd\'
ELSE DO ADD 'N:\tv\'
DO ADD '%yea\%ann [%eps]\'
| Tag | Description |
|---|---|
%ann |
Anime name (romaji) |
%eng |
Anime name (english) |
%kan |
Anime name (kanji) |
%epn |
Episode name |
%enr |
Episode number |
%grp |
Group short name |
%crc / %CRC |
CRC32 (lower/upper) |
%ed2 / %ED2 |
ED2K hash (lower/upper) |
%src |
Source (TV, DVD, etc.) |
%res |
Resolution |
%yea |
Year |
| Test | Description |
|---|---|
A(name) |
Anime name/ID (supports regex) |
G(name) |
Group name/ID |
R(source) |
Source: TV, DVD, HKDVD, www, etc. |
T(type) |
Type: TV, OVA, Movie, Other, web |
D(lang) |
Dub language |
S(lang) |
Sub language |
Y(year) |
Year or range (e.g., Y(2000-2010)) |
I(tag) |
Tag is defined |
Use ; for AND, , for OR, ! for NOT.
Media servers like Plex, Jellyfin, and Emby require TVDB naming (S01E01 format) rather than AniDB absolute numbering. Use FileBot to convert WebAOM-renamed files.
Note: This expression is designed for files renamed with WebAOM's default template:
%ann (%yea) - %enr - %epn [%src-%res][%aud][%dub][%vid]-%grp
filebot -rename "FILES" --db AniDB --format @format.txt -non-strictformat.txt — converts AniDB matches to TVDB season/episode numbering:
{def grp=any{group}{fn.tokenize("-")[-1].tokenize(".")[0]}; def lang=any{audioLanguages.join("+")}{""}; def src=any{vs}{source}{""}; def res=any{vf}{resolution}{""}; def aud=any{ac}{""}; def vid=any{vc}{""}; db.TheTVDB.n+" ("+any{db.TheTVDB.y}{""}+") - "+db.TheTVDB.s00e00+" - "+db.TheTVDB.t+" ["+src+"-"+res+"]["+aud+"]["+lang+"]["+vid+"]"+(grp?"-"+grp:"")}This uses the db.TheTVDB cross-reference binding which maps AniDB episodes to TVDB using the Anime-Lists project.
Example conversion:
From: Gintama (2006) - 083 - Rank Has Nothing to Do With Luck [DVD-760x576][FLAC][japanese][H264]-CBT.mkv
To: Gintama (2006) - S02E34 - Rank Has Nothing to Do with Luck [DVDRip-576p][FLAC][jpn][x264]-CBT.mkv
| Key | Action |
|---|---|
? |
Show keyboard shortcuts help |
| Enter/Space | Show job info |
| A | Open anime page in browser |
| M | Open MyList page in browser |
| W | Watch file (Windows/macOS) |
| X | Open containing folder |
| P | Pause/unpause job |
| S | Apply rules / update status |
| I | Re-identify file |
| Left | Collapse row (tree view) |
| Right | Expand row (tree view) |
| F5/⌘R | Refresh alternate view |
| F9 | Reset application |
| Delete/BackSpace | Delete selected jobs |
| ESC | Stop worker thread |
WebAOM uses an embedded SQLite database by default. For PostgreSQL or MySQL:
- Create the database with Unicode support
- Enter the JDBC URL in Options → "My Database":
jdbc:postgresql://localhost/webaom?user=myuser&password=mypass jdbc:mysql://localhost/webaom?user=myuser&password=mypass - Press Enter to connect
Requires Java 21+. Gradle is included via wrapper.
./gradlew build # Compile and create JARs
./gradlew run # Run the application| Command | Description |
|---|---|
./gradlew clean |
Remove build artifacts |
./gradlew spotlessApply |
Format code |
./gradlew jpackage |
Create native installer for current platform |
Git hooks are installed automatically by Gradle. Any ./gradlew ... invocation refreshes
.git/hooks/pre-commit and .git/hooks/pre-push shims that run repository hooks.
These hooks run spotlessCheck on commit (for staged Java/Gradle changes) and on push.
Created by epoximator — RIP (developed 2005–2010). Revived in 2025 as a maintenance fork from AniDB's UDP clients repository.
Goals: preserve the application, fix bugs, and maintain compatibility with modern Java.
GNU General Public License v2 (GPLv2)