A web-based tool for creating and editing item filters for Median XL (an overhaul mod for Diablo 2). This editor provides an enhanced interface for the in-game filter editor.
Current MedianXL version data: MXL 2.11.1
- Save filters in browser's local storage
- More extensive item code list than the in-game editor
- Search by item name, class, or category
- Drag-and-drop reordering of rules
- Set default notification behavior
- Configure default map marker display
-
Creating a New Filter
- Click "New filter" or paste existing filter data (JSON format)
- Give your filter a descriptive name
-
Adding Rules
- Click "Add new rule" to create filtering rules
- Configure each rule's parameters:
- Item/Class selection
- Quality and ethereal state requirements
- Character and item level ranges
- Notification and minimap marker settings
-
Managing Rules
- Drag the handle (↕) to reorder rules
- Use checkboxes to enable/disable rules
- Click the trash icon to delete rules
-
Save & Export
- Save to browser storage for later use
- Click "Copy to clipboard" to export your filter for in-game use
Median XL item and class data is sourced from the Not Armory website, provided by Aahz.
| Asset name | Source | Link | Description |
|---|---|---|---|
| items.json | Not Armory | items.json |
Contains item codes |
| item_classes.json | Not Armory | item_classes.json |
Contains item classes |
| logo.png | OpenAI's ChatGPT | App logo generated using ChatGPT |
This project uses several open-source libraries:
| Library | Purpose | Version | Link |
|---|---|---|---|
| jQuery | DOM manipulation | 3.7.1 | jquery.com |
| Bulma CSS | CSS framework | 1.0.1 | bulma.io |
| DataTables | Table interaction | 2.2.2 | datatables.net |
| SortableJS | Drag-and-drop functionality | 1.14.0 | SortableJS |
| FontAwesome | Icons | 5.15.4 | FontAwesome |
| LZ-string | Compression | 1.4.4 | Pieroxy |
Filter editor imports and exports a .json file with a structure matches the one used by the game. The following keys are omitted from exports since modifying them could affect other loaded filters: "active" and "favorite".
Here's the example filter structure with common values explained:
The following files allow for overriding full item data:
- item_hide_list: Hides specific items from item dropdown e.g.,
"540094578": "El Rune" - item_name_overrides: Allows to change in-game item names to more specific ones e.g.,
"825260387": "Small Cycle (Strength)"
File structure:
{
// Value "itemName" is only used here to easy determine which item will be hidden
"value": "itemName"
}
{ "default_show_items": true, "name": "My Filter", "rules": [ { "active": true, "show_item": true, // Item quality value decides the rarity of the item e.g. Normal, Magic, Unique, Honorific, etc.. Default is "-1" which matches any rarity "item_quality": -1, // Ethereal has 3 states: // 0 - Either (default value), 1 - Yes, 2 - No "ethereal": 0, // Clvl has a range of 0 - 150 "min_clvl": 0, "max_clvl": 0, // Ilvl has a range of 0 - 150 "min_ilvl": 0, "max_ilvl": 0, // Rule type decides what value should be stored inside the "params". Here's the mappings with example values: // | rule_type | params | // |-----------|-----------------------| // | -1 | null | // | 0 | { "class": 10 } | // | 1 | { "code": 540291698 } | "rule_type": 1, "params": { "code": 540291698 }, "notify": true, "automap": true } ] }