Skip to main content
Tuliprox supports two layers of editorial logic:
  • Reusable templates — named regex fragments referenced with !name! syntax
  • Mapping rules — a small DSL for renaming, regrouping, and enriching content

Template loading

Templates can live in three places: If a directory is used, all *.yml files are loaded in alphanumeric order and merged. Template names must be globally unique across all sources.

Template syntax

Define templates as named string values:
Reference a template by wrapping its name in ! characters:
Templates can reference other templates in their value.

mapping.yml structure

The top-level mappings key holds: Each mapping entry defines:

match_as_ascii

When enabled, Tuliprox deunicodes field values before applying filters. This lets simple ASCII patterns match content with accented or special characters:
  • ée
  • öo
  • ßss

Mapper rules

Each mapper rule contains:

Mapper DSL reference

Accessing playlist fields

Playlist fields are accessed with the @Field syntax. Fields can also be assigned to update the output:

Variable assignment

Regex capture

Regex matches expose numbered captures via .1, .2, etc., and named captures via .name:

match block

Select a value based on which variables are truthy:

map block

Map a variable’s value to a new value:
Range syntax is supported for numeric mapping:

for_each

Iterate over split values or regex capture groups:

Nested map blocks

map blocks can be nested:

Built-in functions


Counters

Counters inject auto-incrementing sequence numbers into channel titles or group names.

Complete mapping.yml example


Advanced grouping example

This script groups channels into quality-oriented or category-oriented buckets:

Grouping by release year


Filter hints

Filters in mapper rules use the same expression language as target filters:
Use regex101.com with the Rust flavor selected to test your regex patterns before adding them to mapping scripts.