- Filters — decide which channels survive into a target.
- Mapping — rename, regroup and enrich the channels that pass.
Filter DSL
Filters are string expressions evaluated against each playlist entry.Fields
Operators
Regex syntax follows the Rust
regex crate. Use (?i) for case-insensitive matching.
For interactive testing, regex101.com works well when the Rust flavour is selected.
Basic examples
Include all channels:Combining operators
Template system
Templates let you name reusable filter fragments and reference them with!name! syntax.
Defining templates
source.yml
Using templates in targets
source.yml
template_path in config.yml to a file or directory of *.yml files:
config.yml
mapping.yml
Rename rules
Simple group/channel renaming is available directly on a target without a full mapper:source.yml
field can be group, title, name or caption. pattern is a Rust regex; new_name supports $1, $2 capture-group references.
Mapper DSL
For complex transformations, define amapping.yml and reference the mapping ID from the target.
Structure of mapping.yml
mapping.yml
source.yml
Playlist field variables
Access playlist fields with the@Field syntax:
Assigning to
@Group, @Caption etc. changes the value in the output.
Built-in functions
Regex captures
Capture groups from a regex match are accessed with.1, .2 etc.:
match blocks
map blocks
for_each
Iterate over split values or capture groups:Complex mapping example
This script groups French channels into quality and category buckets:Grouping by release year
Counters
Counters append or prepend an incrementing number to a field:mapping.yml
Processing order
By default tuliprox applies Filter → Rename → Map. Change this withprocessing_order:
source.yml
frm, fmr, rfm, rmf, mfr, mrf
(f = filter, r = rename, m = map).