- Watch files are now moved inside the
target
folder. Move them manually fromwatch_<target_name>_<watched_group>.bin
to<target_name>/watch_<watched_group>.bin
- No error log for xtream api when content is skipped with options
xtream_skip_[live|vod|series]
- experimental: added live channel connection sharing in reverse proxy mode. To activate set
share_live_streams
in target options. - Added
info
andtmdb-id
caching for vod and series with optionsxtream_resolve_(series|vod)
. - The
kodi
format for movies can contain thetmdb-id
(optional). To add thetmdb-id
you can set nowkodi_style
,xtream_resolve_vod
,xtream_resolve_vod_delay
,xtream_resolve_series
andxtream_resolve_series_delay
to target options. kodi
output can now haveusername
attribute to use reverse proxy mode when combined withxtream
output.- Fixed webUI manual update for selected targets
- Added m3u logo url rewrite in
reverse proxy
mode or withm3u_mask_redirect_url
option. - BPlusTree compression changed from zlib to zstd.
- Breaking change: multi scheduler config with optional targets.
# sec min hour day of month month day of week year
schedules:
- schedule: "0 0 8 * * * *"
targets:
- vod_channels
- schedule: "0 0 10 * * * *"
targets:
- series_channels
- schedule: "0 0 20 * * * *"
- Stats have now target information
- Prevent simultaneous updates
- Added target options
remove_duplicates
to remove entries with sameurl
.
- added Target Output Option
m3u_include_type_in_url
, default false. This addslive
,movie
,series
to the url of the stream in reverse proxy mode. - added Target Output Option
m3u_mask_redirect_url
, default false. The urls are pointed to m3u-filter in redirect mode. In stream request a redirect response is send. Usefully if you want to track calls in redirect mode. - fixed xtream api redirect url problem.
- Fixed api proxy server url bug
- The configured directories
data
,backup
andvideo-download
are created when configured and do not exist. - set "actix_web::middleware::logger" to level
error
- masking sensitive information in log
- hls support (m3u8 url, ignores proxy type, always redirect)
- EPG is now first downloaded to disk instead of directly into memory, then processed using a SAX parser (slower but reduces memory usage from up to 2GB).
- Various code optimizations have been applied.
- Regular expression matching in log output is now set to trace level to prevent flooding the debug log.
- Processing stats now include a
took
field indicating the processing time.
- breaking change virtual_id handling. You need to clear the data directory.
- new content storage implementation with BPlusTree indexing.
- api responses are now streamed directly from disk to avoid memory allocation.
- fixed scheduler implementation to only wake up on scheduled times.
- input url supports now scheme
file://...
(which is not necessary because file paths are supported). Gzip files are also supported. - sort takes now a sequence for channel values which has higher priority than sort order
- fixed error handling in filter parsing
NOT
filter is nownon greedy
.NOT Name ~ "A" AND Group ~ "B"
wasNOT (Name ~ "A" AND Group ~ "B")
. Now it is(NOT Name ~ "A") AND Group ~ "B"
- Implemented workaround for missing tvg-ID
- if Content type of file download is not set in header, the gzip encoding is checked through magic header.
- if source is m3u and stream id not a number, the entry is skipped and logged.
- prefix and suffix was applied wrong, fixed.
- epg timeshift, define timeshift api-proxy.yml for each user as
epg_timeshift: hh:mm
, example-2:30
,1:45
,+0:15
,2
,:30
,:3
,2:
- timeshift.php api implementation
- New Filter
type
added can be uses asType = vod
orType = live
orType = series
- Counter in
mapping.yml
. Each mapper can have counters to add counter to specific fields. - Added new mapper feature
transform
.uppercase
,lowercase
andcapitalize
supported. - Fixed parsing invalid m3u playlist entries like
tvg-logo="[""]"
- added
source
-input
-name
attribute to README - added
chno
to Playlist attributes. epg_channel_id
mapping fixed
- Added Encoding handling: gzip,deflate
- Fixed panic when
tvg-id
is not set.
- m3u playlists are not saved as plainfile, therefor m3u output filename is not mandatory, if given the plain m3u playlist is stored.
- Added
--healthcheck
argument for docker - Added
catch-up
/timeshift
api forxtream
- major version change due to massive changes
update_on_boot
for config, default is false, if true an update is run on startcategory_id
filter added to xtream api- Handling for m3u files without id and group information
- Added
panel_api.php
endpoint for xtream - Case insensitive filter syntax
- Xtream category_id fixes, to avoid category_id change when title not changes.
- Target options
xtream_skip_live_direct_source
andxtream_skip_video_direct_source
are now default true - added new target option
xtream_skip_series_direct_source
default is true
- Added new options to input configuration.
xtream_skip_live
,xtream_skip_vod
,xtream_skip_series
- Updated docker files, New Dockerfile with builder to build an image without installing rust or node environments.
- Generating xtream stream urls from m3u input.
- Reverse proxy implementation for m3u playlist.
- Mapper can now set
epg_channel_id
. - Added environment variables for User Credentials
username
,password
andtoken
in format${env:<EnvVarName>}
where<EnvVarName>
should be replaced. - Added
web_ui_enabled
toconfig.yml
. Default istrue
. Set tofalse
to disable webui. - Added
web_auth
toconfig.yml
struct for web-ui-authentication is optional.enabled
: default trueissuer
issuer for jwt tokensecret
secret for jwt tokenuserfile
optional userfile with generated userfile in format "username: password" per file, default name is user.txt in config path
- Password generation argument --genpwd to generate passwords for userfile.
- Added env var
M3U_FILTER_LOG
for log level - Log Level has now module support like
m3u_filter::util=error,m3u_filter::filter=debug,m3u_filter=debug
- Multiple Xtream Sources merging into one target is now supported
- Fixed WebUI Option-Select
- WebUI: added gallery view as second view for playlist
- Breaking change config path. The config path is now default ./config. You can provide a config path with the "-p" argument.
- Renamed api-proxy.yml server info field
ip
tohost
- Multiple server-config for xtream api. In api-proxy.yml assign server config to user
- Watch filter are now regular expressions
- Fixed watch file not created problem
- UI responds immediately to update request
- Changed api-proxy user default proxy type from
reverse
toredirect
- Added
xtream_resolve_series
andxtream_resolve_series_delay
option form3u
target - Messaging calling rest endpoint added
- Messaging added 'Watch' option as OptIn
- Breaking change,
config.yml
split intoconfig.yml
andsource.yml
- Added
backup_dir
property toconfig.yml
to store backups of changed config files. - Added regexp search in Web-UI
- Added config Web-UI
- Added xtream vod_info and series_info, stream seek.
- Added input options with attribute xtream_info_cache to cache get_vod_info and get_series_info on disc
- for xtream api added proxy types reverse and redirect to user credentials.
- added new target options
xtream_skip_live_direct_source
xtream_skip_video_direct_source
- internal optimization/refactoring to avoid string cloning.
- new options for downloading media files from web-ui
organize_into_directories
episode_pattern
- Web-UI - Download View with multi download support
- Added WebSearch Url
web_search: 'https://www.imdb.com/search/title/?title={}'
under video configuration.
- Fixed epg for xtream
- Fixed some Web-UI Problems
- Added some convenience endpoints to rest api
- Added scheduler to update lists in server mode.
- Added Xtream Cluster Live, Video, Series. M3u Playlist cluster guessing through video file endings.
- Added api-proxy config for xtream proxy, to define server info and user credentials
- Added Xtream Api Endpoints.
- Added M3u Api Endpoints.
- Added multiple input support
- Added Messaging with opt in message types [info, error, stats]
- Added Telegram message support
- Added Target watch for groups
- Fixed TLS problem with docker scratch
- Added simple stats
- Target Output is now a list of multiple output formats, !breaking change!
- RegExp captures can now be used in mapper attributes
- Added file download to a defined directory in config
- Refactored web-ui
- Added XMLTV support
Changes in config.yml
messaging:
notify_on:
- error
- info
- stats
telegram:
bot_token: '<your telegram bot token>'
chat_ids:
- <your telegram chat_id>
schedules:
- schedule: '0 0 0,8,18 * * * *'
api-proxy.yml
server:
protocol: http
ip: 192.168.9.3
http_port: 80
https_port:
rtmp_port:
timezone: Europe/Paris
message: Welcome to m3u-filter
user:
- target: pl1
credentials:
- {username: x3452, password: ztrhgrGZrt83hjerter}
- Refactored sorting. Sorting channels inside group now possible
- Added target argument for command line.
m3u-filter -t <target_name> -t <target_name>
. Target names should be provided in the config. - Added filter to mapper definition.
- Refactored filter parsing.
- Fixed sort after mapping group names.
- Refactored mapping, fixed reading unmodified initial values in mapping loop from ValueProvider, because of cloned channel
- Added optional 'enabled' property to input and target. Default is true.
- Fixed template dependency replacement.
- Added optional 'name' property to target. Default is 'default'.
- Added Dockerfile
- Added xtream support
- Breaking changes: config changes for input
- Added new fields to mapping attributes and assignments
- "name"
- "title"
- "group"
- "id"
- "chno"
- "logo"
- "logo_small"
- "parent_code"
- "audio_track"
- "time_shift"
- "rec"
- "source"
- Added static suffix and prefix at inpupt source level
- Breaking changes, mappings.yml refactored
- Added
threads
property to config, which executes different sources in threads. - WebUI: Added clipboard collector on left side
- Added templates to config to use in filters
- Added nested templates, templates can have references to other templates with
!name!
. - Renamed Enum Constants
- M3u -> m3u,
- Strm -> strm
- FRM -> frm
- FMR -> fmr
- RFM -> rfm
- RMF -> rmf
- MFR -> mfr
- MRF -> mrf
- Group -> group (Not in filter regular expressions)
- Name -> name (Not in filter regular expressions)
- Title -> title (Not in filter regular expressions)
- Url -> url (Not in filter regular expressions)
- Discard -> discard
- Include -> include
- Asc -> asc
- Desc -> desc
- Renamed
mappings.templates
attributekey
toname
mappings.tag
is now a struct- captures: List of captured variable names like
quality
. - concat: if you have more than one captures defined this is the join string between them
- suffix: suffix for thge tag
- prefix: prefix for the tag
- captures: List of captured variable names like
- Upgraded libraries, fixed serde_yaml v.0.8 empty string bug.
- Added Processing Pipe to target for filter, map and rename. Values are:
- FRM
- FMR
- RFM
- RMF
- MFR
- MRF default is FMR
- Added mapping parameter
match_as_ascii
. Default isfalse
. Iftrue
before regexp matching the matching text will be converted to ascii. unidecode
Added regexp templates to mapper:
mappings:
- id: France
tag: ""
match_as_ascii: true
templates:
- key: delimiter
value: '[\s_-]*'
- key: quality
value: '(?i)(?P<quality>HD|LQ|4K|UHD)?'
mapper:
- tvg_name: TF1 $quality
# https://regex101.com/r/UV233E/1
tvg_names:
- '^\s*(FR)?[: |]?TF1!delimiter!!quality!\s*$'
tvg_id: TF1.fr
tvg_chno: "1"
tvg_logo: https://emojipedia-us.s3.amazonaws.com/source/skype/289/shrimp_1f990.png
group_title:
- FR
- TNT
mapping
attribute for target is now a list. You can assign multiple mapper to a target.
mapping:
- France
- Belgium
- Germany
- Added mappings. Mappings are defined in a file named
mapping.yml
or can be given by command line option-m
.target
has now an optional fieldmapping
which has the id of the mapping configuration. - rename is now optional
Strm
output has an additional optionkodi_style
. This option tries to guess the year, season and episode for kodi style names. https://kodi.wiki/view/Naming_video_files/TV_shows
Strm
output has an additional optioncleanup
. This deletes the old directory given atfilename
.
- There are two types of targets
m3u
andstrm
. This can be set by theoutput
attribute toStrm
orM3u
. If the attribute is not specifiedM3u
is created by default.Strm
output has an additional optionunderscore_whitespace
. This replaces all whitespaces with_
in the path.
- Changed filter. Filter are now defined as filter statements. Url added to filter fields.
- Changed configuration. It is now possible to handle multiple sources. Each input has its own targets.
- Updated frontend libraries
- Added Search, currently only plain text search
- Added options to target, currently only ignore_logo
- Added sorting to groups
- Fixed: config input persistence filename was ignored
- Added working_dir to configuration
- relative web_root is now checked for existence in current path and working_dir.
- Fixed server exit on playlist not found
- Added copy link to clipboard in playlist tree
- Updated frontend packages
- Added linter for code checking
- Updated tree layout and added hover coloring
- Fixed Url Field could not be edited after drop down selection
- Added download on key-"Enter" press
- Added simple WEB-UI
- Start in server mode
- Initial project release