A library for interacting with Path of Exile game and economy data, and a unique loot filter generation framework.

Overview

wraeblast

Discord

A library for interfacing with Path of Exile game and economy data, and a set of item filters geared towards trade league players.

Filter Generation

Wraeblast provides an experimental, feature-rich item filter development framework and toolkit, as well as a dogfooded trade league filter.

โš ๏ธ DISCLAIMER: โš ๏ธ This is an experimental, proof-of-concept project, and the author is not responsible for any loss of currency or efficiency as a result of using this project's filters. Please use FilterBlade for regular gameplay unless you're brave enough to deal with a pre-alpha filter.

Framework Features

  • Economy insights API powered by poe.ninja
    • Integration with pandas for data normalization and analysis
    • Local caching and rate limiting
  • Powerful extended item filter framework
    • Internally uses single API to express both standard and extended filter rules
    • Jinja2-templated YAML filter format
    • Some extended filter features include:
      • Rule tagging
      • Presets (i.e. feature flags)
      • Styles
      • Template environment helpers for ๐ŸŒˆ color manipulation, ๐Ÿ“ˆ economy data quantization and grouping, ๐Ÿ”Š filter alert sound generation (TTS), and more
  • Matplotlib colormap integration, enabling procedural generation of item-based (not just tier-based like many popular community filters) filter colors.
  • ...and many other technical features under the hood.

Filter Features

  • ๐Ÿ“Š Quantile based variants for efficient farming.โ€ 

    Currently provides two variants: D2 (2nd decile) and QU4 (4th quintile). Additional quantiles will probably be included in nightly releases, depending on feedback and experimentation.

  • ๐ŸŒŒ 54 colormaps (108 if you include reversed colormaps, indicated by an _r prefix) included per quantile variant.

    There are even more colormap palettes available, it would just be too cost prohibitive to include them all at present. See the Palettable documentation for colormap previews (only sequential colormaps are used).

    Some form of item filter preview may be added as a feature in the future, but for now either refer to the documentation or just try them out in game.

  • ๐Ÿ”Š AWS Polly Neural Text-To-Speech (NTTS) powered synthesized alert sounds for โœจ all โœจ valuable filter rules (quantile dependent).

    Get instant, aural feedback for currency, fragments, skill gems, cluster jewels, and more. Anything tracked by poe.ninja can be supported by TTS.

    Filter sounds for relevant items are also generated for varying stack sizes, for more accurate chaos value approximations.

    The Aria (New Zealand English, appropriately) voice is currently the default for the trade league filters included with this project, but any voice supported by AWS Polly can be used when developing new filters.

โ€  TLDR: think of quantiles like strictness, with an arguably better ranking of item and currency value in a trade league than hard-coded tiers.

Demos

Installation

Download the filter variant(s) of your choice from the releases, as well as the latest, compressed TTS filter sounds. Extract both the .filter and the FilterSounds directory to your Path of Exile directory.

Filter syncing is currently not supported, and would be largely useless regardless without a way to sync filter sound files.

Note that updating the filter also requires updating the TTS files, and you can simply choose to overwrite existing files every time, or delete the entire TTS folder before installing the latest version.

Rationale Development Manifesto

  • Path of Exile's current loot system requires complex filters for efficient gameplay ๐Ÿคฆ
  • Complex filters require a ๐Ÿ”จ filter generation/templating layer ๐Ÿ”จ (this is exactly what NeverSink has done)
  • Many community maintained filters (including NeverSink's) are โœจ awesome โœจ and work well for the majority of the playerbase, but have some shortcomings:
    • ๐Ÿš€ รœber strict isn't always รผber enough for softcore juiced map blasters (filter "strictness" in general is a trap)
    • ๐ŸŒˆ Filter customization is somewhat limiting and tedious to do through a web interface (loot filters are code)
    • ๐Ÿ“ˆ Economy-based presets and filters leverage a small subset of the available data from poe.ninja
    • ๐Ÿ› Filter rules take the kitchen sink approach and include a large amount of rules for low-value recipes and items
    • ๐Ÿ”Š Default alert sounds and sound rules are usually sparse, and adding custom sounds is a time-consuming process

Architecture

  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚                        โ”‚
  โ”‚ .yaml.j2 filter source โ”œโ”€โ”€โ”€โ”€โ”
  โ”‚                        โ”‚    โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚  โ”‚                     โ”‚  โ”‚          โ”‚
                                โ”œโ”€โ”€โ”ค    rendered .yaml   โ”œโ”€โ”€โ”ค  final   โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚ intermediate filter โ”‚  โ”‚ .filter  โ”‚
โ”‚                             โ”‚ โ”‚  โ”‚                     โ”‚  โ”‚          โ”‚
โ”‚ .config.json filter options โ”œโ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  1. Economy insights data (currently just poe.ninja) is fetched and cached
  2. The .yaml.j2 is rendered with the economy data, colormaps, and filter option overrides from the .config.json file as context, if provided.
  3. The resulting intermediate .yaml is then parsed by the extended filter parser, and outputs a final .filter file, and any associated sounds.

Usage

See wraeblast --help and wraeblast render_filter --help for detailed command line usage.

โฏ wraeblast render_filter \
    -l Expedition \
    -d output \
    -O filters/softcore.config.json \
    -o softcore.filter -i -vvv filters/softcore.yaml.j2

For detailed library installation instructions and usage, see the technical documentation.

Roadmap

  • Base filter generation functionality that nobody cares about
  • Basic filters for different play styles: HC SSF, SC SSF, casual, deli farming, harby farming, legion farming, and all-around blasting ๐Ÿš€
  • Features for league launches: shimming new item classes without relying on poe.ninja data, early league specific colormaps, thresholds, etc.
  • Performance improvements
  • Unit tests and documentation
  • Filter preview image generation
  • Filter compression/deduping of rules
  • Investigate auto-updating, but yet another downloadable tool to do it is out of the question (probably)
  • Integration with poeprofit (i.e. dedicated styles and sounds for profitable strategies)
  • Web frontend for downloading up-to-date filters (sans the complex configuration menus full of knobs and sliders and color pickers)
  • Become obsolete when PoE 2 comes out ๐Ÿ‘ป

[REDACTED]

Additional features and tools are planned and will be incorporated into this project in the near future.

Comments
  • Error on Loading

    Error on Loading

    So Ive installed it exactly like the installation guide said, when loading it up on POE, I didnt see the filter except a filter called new filter. So I used that and I got line 4906: Unable to parse parameter for BaseType rule: No base types found matching "Blood Magic Support"

    opened by HelloMikko 5
  • Question regarding 6sockets

    Question regarding 6sockets

    The filter is currently showing 6Sockets even on Q5, even though they're practically worthless. Is this by choice or is it an oversight?

    on Q4+, an awakened sextant being 1.7-2c is hidden, while the 6socket is shown.

    opened by Cloudslapper 3
  • Conda environment compatability.

    Conda environment compatability.

    Background:

    As this seems to be a mix of data science and software development project, there are some things to think about. Conda as a package and python virtual environment manager is ubiquitous in data science, sometimes to the consternation of Python programmers. Conda will just work with traditional (and admittedly janky) setuptools based package requirements. It can also use an environment.yml file specifically for conda, or even just a simple pip requirements file.

    Description of the problem:

    I went down a rabbit hole chasing down getting poetry to work using my conda based python installation, and setting up poetry inside of a conda based (python) virtual environment. The official docs of poetry recommend a base installation separate of package managers like conda (https://python-poetry.org/docs/#alternative-installation-methods-not-recommended). Documentation is lacking in how poetry interacts with conda virtual environments (https://github.com/python-poetry/poetry/issues/1724). Poetry devs decided to reject even considering conda compatibility and closed the issue (https://github.com/python-poetry/poetry/issues/105). There are some scripts for taking a poetry based pyproject file and converting it to a conda one (https://github.com/dojeda/poetry2conda), however, they are unmaintained, and require individually reviewing packages, knowing whether their Pypi or conda names are used, and editing the pyproject.toml file to point to the correct package manager, source, names, etc, possibly for many dependencies. Poetry also requires a workaround to install a package in editable mode, which is sometimes used for development work.

    As a result of this, I spent more than half an hour trying to simply create a virtual environment that I could work on wraeblast with.

    Issue:

    Wraeblast is difficult to get running for people using conda, without possibly messing up your development environment (as several documented issues on poetry's github page shows). There are issues with poetry's own dependencies bleeding into the virtual environment or even your root/base python environment. This is caused by a lack of providing "the old way" of packaging python software, as existing workflows were configured to work from this (admittedly somewhat flawed) system.

    Suggestion:

    Provide and maintain either a traditional setup.py, an alternative requirements.txt, or even better, a conda environment.yml file for easily starting to work on wraeblast. It would have taken me about 20 seconds instead of more than half an hour, and especially as you said on reddit, if you want some data scientist type people taking a look at the package, it would make the process of contributing much more accessible for that community.

    Conclusion:

    Please add a non-poetry way of dependency tracking that works with existing workflows prevalent in other communities, or at least a guide on how to get this running using poetry and the recent PEP suggested pyproject.toml files.

    enhancement 
    opened by emirkmo 2
  • Line 3088: Unable to parse parameter for BaseType

    Line 3088: Unable to parse parameter for BaseType

    Line 3088: Unable to parse parameter for BaseType rule: No base types found matching "Scourged Bone Crypt Map"

    newest nightly

    Edit: every entry with Scourged 'map' as its basetype, makes the filter fail to load.

    bug 
    opened by Cloudslapper 0
  • Line 22274: Unable to parse parameter for BaseType rule: No base types found for exactly matching

    Line 22274: Unable to parse parameter for BaseType rule: No base types found for exactly matching "Maven's Orb"

    As of March 2022 I am getting this error: Line 22274: Unable to parse parameter for BaseType rule: No base types found for exactly matching "Maven's Orb"

    opened by joyzer 0
  • Some T1 Item Bases might not get displayed

    Some T1 Item Bases might not get displayed

    Just ran some Abysses and noticed ilvl86 Stygian Vises not showing up on strictness D2

    Since the Base is worth 12-16c, the filter might be missing that:

    https://poe.ninja/challenge/base-types?name=stygian&level=86%2B

    opened by kxc0re 8
Releases(v0.3.0)
Owner
David Gidwani
David Gidwani
A collection of custom scripts for working with Quake assets.

Custom Quake Tools A collection of custom scripts for working with Quake assets. Features Script to list all BSP files in a Quake mod

Jason Brownlee 3 Jul 05, 2022
A quick username checker to see if a username is available on a list of assorted websites.

A quick username checker to see if a username is available on a list of assorted websites.

Maddie 4 Jan 04, 2022
Blender 2.93 addon for loading Quake II MD2 files

io_mesh_md2 is a Blender 2.93 addon for importing Quake II MD2 files.

Joshua Skelton 11 Aug 31, 2022
A python tool give n number of inputs and parallelly you will get a output by separetely

http-status-finder Hello Everyone!! This is kavisurya, In this tool you can give n number of inputs and parallelly you will get a output by separetely

KAVISURYA V 3 Dec 05, 2021
Python based tool to extract forensic info from EventTranscript.db (Windows Diagnostic Data)

EventTranscriptParser EventTranscriptParser is python based tool to extract forensically useful details from EventTranscript.db (Windows Diagnostic Da

P. Abhiram Kumar 24 Nov 18, 2022
A python module to manipulate XCode projects

This module can read, modify, and write a .pbxproj file from an Xcode 4+ projects. The file is usually called project.pbxproj and can be found inside the .xcodeproj bundle. Because some task cannot b

Ignacio Calderon 1.1k Jan 02, 2023
Retrying library for Python

Tenacity Tenacity is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just

Julien Danjou 4.3k Jan 05, 2023
Keval allows you to call arbitrary Windows kernel-mode functions from user mode, even (and primarily) on another machine.

Keval Keval allows you to call arbitrary Windows kernel-mode functions from user mode, even (and primarily) on another machine. The user mode portion

42 Dec 17, 2022
Skywater 130nm Klayout Device Generators PDK

Skywaters 130nm Technology for KLayout Device Generators Mabrains is excited to share with you our Device Generator Library for Skywater 130nm PDK. It

Mabrains 18 Dec 14, 2022
A Python library for reading, writing and visualizing the OMEGA Format

A Python library for reading, writing and visualizing the OMEGA Format, targeted towards storing reference and perception data in the automotive context on an object list basis with a focus on an urb

Institut fรผr Kraftfahrzeuge, RWTH Aachen, ika 12 Sep 01, 2022
A tiny Python library for generating public IDs from integers

pids Create short public identifiers based on integer IDs. Installation pip install pids Usage from pids import pid public_id = pid.from_int(1234) #

Simon Willison 7 Nov 11, 2021
Display your calendar on the wallpaper.

wallCal Have your calendar appear as the wallpaper. disclaimer Use at your own risk. Don't blame me if you miss a meeting :-) Some parts of the script

7 Jun 14, 2022
isort is a Python utility / library to sort imports alphabetically, and automatically separated into sections and by type.

isort is a Python utility / library to sort imports alphabetically, and automatically separated into sections and by type. It provides a command line utility, Python library and plugins for various e

Python Code Quality Authority 5.5k Jan 08, 2023
This two python programs can convert km to miles and miles to km

km-to-miles These two little python programs can convert kilometers to miles and miles to kilometers Needed Python3 or a online python compiler with t

Chandula Janith 3 Jan 30, 2022
โœจ Une calculatrice totalement faite en Python par moi, et en franรงais.

Calculatrice โ— Une calculatrice totalement faite en Python par moi, et en franรงais. ๐Ÿ”ฎ Voici une calculatrice qui vous permet de faire vos additions,

MrGabin 3 Jun 06, 2021
Find version automatically based on git tags and commit messages.

GIT-CONVENTIONAL-VERSION Find version automatically based on git tags and commit messages. The tool is very specific in its function, so it is very fl

0 Nov 07, 2021
Python program for Linux users to change any url to any domain name they want.

URLMask Python program for Linux users to change a URL to ANY domain. A program than can take any url and mask it to any domain name you like. E.g. ne

2 Jun 20, 2022
ticktock is a minimalist library to view Python time performance of Python code.

ticktock is a minimalist library to view Python time performance of Python code.

Victor Benichoux 30 Sep 28, 2022
Tools for binary data on cassette

Micro Manchester Tape Storage Tools for storing binary data on cassette Includes: Python script for encoding Arduino sketch for decoding Eagle CAD fil

Zack Nelson 28 Dec 25, 2022
More routines for operating on iterables, beyond itertools

More Itertools Python's itertools library is a gem - you can compose elegant solutions for a variety of problems with the functions it provides. In mo

2.9k Jan 06, 2023