Stream custom live channels using your own media
ZLIB License
Bot releases are hidden (Show)
Active Date Range
to block playout template editor to allow limiting templates to a specific date range
Deco
system for "decorating" channels with non-primary content
XMLTV Days To Build
setting, which is distinct from the existing Playout Days To Build
setting
XMLTV Days To Build
cannot be larger than Playout Days To Build
$HOME/.local/share/ersatztv
$HOME/Library/Application Support/ersatztv
Video Profile
setting to FFmpeg Profile
editor when h264
format is selectedVideo Preset
setting to FFmpeg Profile
editor for some combinations of acceleration and video format:
Nvenc
/ h264
Nvenc
/ hevc
Qsv
/ h264
Qsv
/ hevc
None
/ h264
None
/ hevc
Playlist
Play All
is unchecked)
Play All
is checked, that playlist item will play all of its items each time through the playlist
ETV_CONFIG_FOLDER
ETV_TRANSCODE_FOLDER
title:"law & order*"
)title:"m*a*s*h"
show_*
tags accurate in the search index (e.g., show_title
, show_studio
)Something.forced.en.srt
Something.sdh.en.srt
Something.en.forced.srt
Something.en.sdh.srt
HLS Segmenter V2
segment duration (previously 10s, now 4s)HLS Segmenter V2
error video generationHLS Segmenter V2
to delete old segments (use less disk space while channel is active)video_bit_depth
search field for Plex mediaHLS Segmenter V2
compliance by:
hevc
video format is selected
1.5. The container format for HEVC video MUST be fMP4.
.m3u8
and .ts
filesHLS Segmenter V2
for channel preview when channel is configured for HLS Segmenter V2
/dev/dri/card*
devices in addition to /dev/dri/render*
devicesETV_CONFIG_FOLDER
- now defaults to /config
ETV_TRANSCODE_FOLDER
- now defaults to /transcode
/root/.local/share/ersatztv
/root/.local/share/etv-transcode
Published by jasongdove 7 months ago
show_studio
and show_content_rating
to search index for seasons and episodesUse embedded subtitles
true
Extract and use embedded (text) subtitles
false
sub_language
and sub_language_tag
fields to search index/iptv
request logging in its own log category at debug level_channel.sbntxt
, _movie.sbntxt
, _episode.sbntxt
, _musicVideo.sbntxt
, _song.sbntxt
, or _otherVideo.sbntxt
which are located in the config subfolder templates/channel-guide
Images
library kind
Media
> Images
page can be used to configure image durations at a folder levelHLS Segmenter V2
HLS Segmenter
in a future releaseLocal
time zone to UTC
.ogv
video files in local librariesHLS Segmenter
sessions
Other Video
, Song
and Image
fallback metadata tags to always include parent folder (folder added to library)libdav1d
, libaom-av1
, av1
)\\SERVERNAME
AND \\ServerName
)Will
database is locked
error that would crash ETV on startup after search index corruptionMPEG-TS
playback when JWT tokens are enabled for streaming endpoints/iptv
routing to make UI completely inaccessible from that path prefixPublished by jasongdove 9 months ago
Accept-Language
header for date time displayFill With Group Mode
Collection
, Multi-Collection
or Smart Collection
is scheduled with Duration
or Multiple
playout modesNone
, Ordered Groups
and Shuffled Groups
:
None
: no change to scheduling behavior - all groups (shows and artists) will be shuffled/ordered togetherOrdered Groups
: each time this item is scheduled, the entire Duration
or Multiple
will be filled with a single group, and the groups will rotate in a fixed orderShuffled Groups
: each time this item is scheduled, the entire Duration
or Multiple
will be filled with a single group, and the groups will rotate in a shuffled orderExternal Json
channels/1.json
Block
Blocks
- ordered list of items to play within the specified durationTemplates
- a generic "day" that consists of blocks scheduled at specific timesPlayout Templates
- templates to schedule using the specified criteria. Only one template will be selected each day/api/sessions
/api/session/{channel-number}
H264
video format and AAC
audio formatMPEG-TS
or HLS Segmenter
streaming modes
MPEG-TS
uses HLS Segmenter
under the hood, the preview player will use HLS Segmenter
, so it's not 100% equivalent, but it should be representativeSettings
page, allowing more specific debug logging as needed
Show Title (Season Number)
Show Title (Show Year) - Season Number
Normalize Loudness
option dynaudnorm
as it often caused streams to fail to startPublished by jasongdove 11 months ago
filler pad to nearest minute
valuePublished by jasongdove 11 months ago
Scaling Behavior
option to FFmpeg Profile
Scale and Pad
: the default behavior and will maintain aspect ratio of all contentStretch
: a new mode that will NOT maintain aspect ratio when normalizing source content to the desired resolutionCrop
: a new mode that will scale beyond the desired resolution (maintaining aspect ratio), and crop to desired resolution
inputstream.ffmpegdirect
properties in channels.m3u when requested by Kodilanguage_tag
and seconds
fields to search indexTV Show
libraries that use Personal Media Shows
agentShow.Name(1992)
scale_npp
filter is unavailableCopy
button would fail to copy to clipboardFile Not Found
stateNormalize Loudness
setting from checkbox to dropdown
Off
: do not normalize loudnessloudnorm
: use loudnorm
filter to normalize loudness (generally higher CPU use)dynaudnorm
: use dynaudnorm
filter to normalize loudness (generally lower CPU use)Media
> Libraries
page with a button to manually re-scan Jellyfin collections as neededMedia
> Libraries
page with a button to manually re-scan Plex collections as neededPublished by jasongdove about 1 year ago
__
)
ELASTICSEARCH__URI
(e.g. http://localhost:9200
)ELASTICSEARCH__INDEXNAME
(default is ersatztv
)__
)
PROVIDER
- set to MySql
MYSQL__CONNECTIONSTRING
- (e.g. Server=localhost;Database=ErsatzTV;Uid=root;Pwd=ersatztv;
)ETV_ALLOW_SHARED_PLEX_SERVERS
to any non-empty valuePublished by jasongdove about 1 year ago
Settings
pagePublished by jasongdove over 1 year ago
Discard To Fill Attempts
setting to duration playout mode
Shuffle
or Random
playback orderFinish
column to playout detail tableVAAPI
: explicitly use CQP
rate control mode when it's the only compatible modeHLS Direct
streaming mode
MPEG-TS
container/output format by default to maintain v0.7.8 compatibility
MP4
and MKV
container/output format can still be configured in Settings
MP4
compatibility with certain contentPad
and Duration
filler - prioritize filling the configured pad/duration
Published by jasongdove over 1 year ago
HLS Direct
streaming mode
MP4
container/output format by default, with new global option to use MKV
container/output formatMP4
output format: stream copy dvd subtitlesMKV
output format: stream copy any embedded subtitlesPublished by jasongdove over 1 year ago
Season, Episode
playback order
Show Media Info
button to movie and episode detail pages for troubleshootingHLS Direct
streams to realtime speedReset Playout
button to use worker thread instead of UI thread
Published by jasongdove over 1 year ago
plot
field from Other Video NFO metadata as XMLTV descriptionStaffel 02
bt470bg
to bt709
using QSV accelerationPublished by jasongdove over 1 year ago
Troubleshooting
page with aggregated settings/hardware accel info for easy referencedirector
fields from music video NFO metadatadirectors
and studios
to music video credit templates/iptv
)
__
)
JWT__ISSUERSIGNINGKEY
access_token
, for example:
http://localhost:8409/iptv/channels.m3u?access_token=ABCDEF
http://localhost:8409/iptv/xmltv.xml?access_token=ABCDEF
/iptv
endpoints will require auth when JWT is configuredbt470bg
to bt709
movie.MKV
as well as movie.mkv
on case-sensitive filesystemsdisplay-name
entries in generated XMLTV
1.2
instead of 1.2.etv
)Media
> Libraries
page with a button to manually re-scan Emby collections as neededPublished by jasongdove over 1 year ago
Published by jasongdove over 1 year ago
Deep Scan
button to Jellyfin and Emby libraries
Other Video
folder tags with tags from sidecar NFOPublished by jasongdove over 1 year ago
__
)
OIDC__AUTHORITY
OIDC__CLIENTID
OIDC__CLIENTSECRET
OIDC__LOGOUTURI
(optional, needed for Auth0, use https://{auth0-domain}/v2/logout?client_id={auth0-client-id}
with proper values for domain and client-id)*any*
) will always match
ETV_UI_V2
to any valuePublished by jasongdove almost 2 years ago
Published by jasongdove almost 2 years ago
ErsatzTV.Scanner
process for scanning all libraries
Published by jasongdove almost 2 years ago
Work-Ahead HLS Segmenter Limit
setting to properly limit number of channels that can work-ahead at oncechannelNumber
channelName
showTitle
showGuids
: array of string ids like imdb_1234
or tvdb_1234
seasonNumber
episodeNumber
episodeGuids
: array of string ids like imdb_1234
or tvdb_1234
preferredLanguageCodes
: array of string preferred language codes configured for the channelaudioStreams
: array of audio stream data, each containing
index
: the stream's index number, this is what the function needs to returnchannels
: the number of audio channelscodec
: the audio codecisDefault
: bool indicating whether the stream is flagged as defaultisForced
: bool indicating whether the stream is flagged as forcedlanguage
: the stream's languagetitle
: the stream's titlechannelNumber
channelName
title
guids
: array of string ids like imdb_1234
or tvdb_1234
preferredLanguageCodes
: array of string preferred language codes configured for the channelaudioStreams
: array of audio stream data, each containing
index
: the stream's index number, this is what the function needs to returnchannels
: the number of audio channelscodec
: the audio codecisDefault
: bool indicating whether the stream is flagged as defaultisForced
: bool indicating whether the stream is flagged as forcedlanguage
: the stream's languagetitle
: the stream's titlevideo_codec
: the video codecvideo_bit_depth
: the number of bits in the video stream's pixel format, e.g. 8 or 10video_dynamic_range
: the video's dynamic range, either sdr
or hdr
Multi-Episode Shuffle
scripting system to use Javascript instead of LuaPublished by jasongdove almost 2 years ago
X-Forwarded-Proto
headerCustom Title
followed by item(s) with Guide Mode
set to Filler
_default.ass.sbntxt
which is located in the config subfolder templates/music-video-credits
.ass.sbntext
, and only make edits to the copied fileresolution
: the ffmpeg profile's resolution, which is used for margin calculationstitle
: the title of the music videotrack
: the music video's track numberalbum
: the music video's albumplot
: the music video's plotrelease_date
: the music video's release dateartist
: the music videos artist (the parent folder)all_artists
: a list of additional artists from the music video's sidecar NFO metadata fileduration
: the timespan duration of the music video, which can be used to calculate timing of additional subtitlesstream_seek
: the timespan that ffmpeg will seek into the media item before beginning playbackMulti-Episode Shuffle
playout order for Television Show
schedule items
s01e01-03.mkv
into s01e01.mkv
, s01e02.mkv
and s01e03.mkv
)scripts/multi-episode-shuffle
tvdb_12345.lua
or imdb_tt123456789.lua
nil
if an episode has not been split)nil
) episodes will be randomly placed between re-combined parts (e.g. part1, part2, part3, un-split, part1, part2, part3)ETV_BASE_URL
environment variable to support reverse proxies that use paths (e.g. /ersatztv
)Place Within Source Content
checkbox in watermark settingsPublished by jasongdove about 2 years ago
0.6.7-beta
that stopped QSV HEVC encoder from workingNvidia
acceleration and software modeOther Videos
when NFO metadata is usedminutes:[5 TO 10]
, minutes:[* TO 3]
)QSV Device
option to ffmpeg profile on linuximdb:tt000000
, tvdb:12345
)