tl;dr
Tool that lets you write an item filter using enhanced syntax. You can name constants, name blocks, nest blocks, obtain names of items within certain price range (from poe.ninja or poe.watch) and possibly more features in the future. Once you have written a filter template (or picked mine or someone else's) you can refresh it with newest data from poe.ninja and/or change some variables to True
/False
to enable/disable certain filter elements.
This is the tool for everyone who:
- likes to make/edit own filters in Notepad++
- would like any abstraction that helps writing such filter
- would like a comprehensive automation of incorporating data from sites like poe.ninja
- would like to debug how an item goes through the filter (you can also debug templates)
More:
- loot preview screen
- filter debug screen
- Download portable application (requires Windows 7+ and like 100 MB RAM) https://github.com/Xeverous/filter_spirit/releases/latest (contains both graphical and command-line versions)
- Documentation (including filters tutorial, filter templates tutoral, FAQ): https://github.com/Xeverous/filter_spirit/tree/master/doc/user
what makes this project unique
As far as I can tell this is the first filter tool that combines all of:
- Pulling price data from sites like poe.ninja or poe.watch and making it available at filter generation time.
- Per-league customization.
- Support for filter variations and cherry-picking strictness changes.
- SSF support (you can opt out of downloading market data and make a static filter).
- NOT having an unchangeable predefined structure etc (basically no limits imposed by implementation). FS template is just a filter file with extra syntax and optional features.
- Abstractions such as nesting blocks and being able to define variables to avoid code duplication.
- Actual parser+compiler that performs semantic analysis. This is not a blind-text-copy-paste, it actually understands the filter and catches many errors before the filter is loaded into the game.
- 100% open source code
example filter template code
The syntax of FS templates is very close to actual filters - the only significant difference is that Show
/Hide
are inside instead of outside to allow nesting blocks. Here is an example code that demonstrates some features:
$color_divination = 100 210 255
$cfg_cards_high_min_value = 100
$cfg_cards_mid_min_value = 10
$cfg_cards_low_min_value = 1
$show_cards_mid = True
$show_cards_low = True
$show_cards_very_low = False
# more variables here...
# each block nested inside this block will inherit Class "Divination Card" condition
Class == "Divination Card" {
BaseType == $cfg_cards_always_show_names {
PlayEffect $beam_card
SetTextColor $color_card
SetBorderColor $color_card
SetFontSize $font_card_mid
SetAlertSound $alert_card_mid
PlayEffect $beam_card
MinimapIcon 1 Blue Square
Show
}
# compiling this will transform Price to BaseType using recent poe.ninja data
Autogen cards
{
Price >= $cfg_cards_high_min_value
{
SetTextColor $color_black
SetBorderColor $color_card
SetBackgroundColor $color_card
SetFontSize $font_card_high
SetAlertSound $alert_card_high
PlayEffect $beam_card
MinimapIcon $icon_card_high
Show
}
Price < $cfg_cards_high_min_value
Price >= $cfg_cards_mid_min_value
{
SetTextColor $color_card
SetBorderColor $color_card
SetFontSize $font_card_mid
SetAlertSound $alert_card_mid
PlayEffect $beam_card
MinimapIcon $icon_card_mid
ShowHide $show_cards_mid
}
Price < $cfg_cards_mid_min_value
Price > $cfg_cards_low_min_value
{
SetTextColor $color_card
SetFontSize $font_card_low
SetAlertSound $alert_card_low
PlayEffect $beam_card Temp
ShowHide $show_cards_low
}
Price <= $cfg_cards_low_min_value
{
SetTextColor $color_card
SetFontSize $font_card_very_low
ShowHide $show_cards_very_low
}
}
# unknown cards
SetTextColor $color_card
SetBorderColor $color_red
SetBackgroundColor $color_black
SetFontSize $font_card_mid
SetAlertSound $alert_card_mid
PlayEffect $beam_card Temp
Show
My github repository also contains an endgame filter I have been working on and using for a long time (multiple leagues). If you would like to write your own filter template, I recommend to read my template. It has a lot of comments and tweakable settings.
Filter Spirit vs Filter Blade
- Filter Blade has been made to fine-tune NeverSink's filter.
- Filter Spirit has been made to be able to compile filters from own templates.
- Filter Blade is more of a filter customizer.
- Filter Spirit is more of a filter compiler/generator.
what now
Got anything to suggest/complain/report/discuss?
- write here in this thread or (later) send me a message
- Xeverous#2151 on Discord (I can also do voice chat)
- create an issue on https://github.com/Xeverous/filter_spirit
- contact me in game account link
special thanks to
- /u/catnib (aka Siegrest) for help with details about consuming item price data available from poe.watch API.
- /u/rasmuskl for details about poe.ninja API.
- /u/Alekhoff who uses the tool since the beginning and keeps close contact with me.
-
/u/Dissolator who explained Filter Blast internals and gave me a proof that filter variant generation problem (
Show
,Hide
or "do not output this block") always has a perfect solution for any situation. - /u/totorodenethor for the PoE CSS project and help explaining how it works. PoE CSS was a major inspiration Filter Spirit took from (even though FS uses very different algorithms in its fundamentals).
- /u/RhysGGG for answering any filter-related questions.
- /u/NeverSinkDev for providing information about internals of his work.
- People behind https://github.com/boostorg/spirit who helped in fixing numerous issues regarding newest library edition and helped track down a GCC bug. Boost Spirit LL(∞) parser is the core of this project.