Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ErsatzTV/legacy/llms.txt

Use this file to discover all available pages before exploring further.

ErsatzTV provides two complementary systems for polishing your virtual TV channels: watermarks add persistent or intermittent image overlays (channel logos, bug graphics, clocks) directly into the video stream, while filler presets define libraries of content — pre-rolls, post-rolls, bumpers, tail clips, and fallback loops — that fill the gaps between scheduled items. Together they let you create a broadcast-quality experience with branded visuals and seamless transitions even when your schedule has uneven content durations.
Watermarks require either a custom image file uploaded to ErsatzTV or a channel logo already configured on the channel. Without an image source the watermark overlay will not render.

Watermarks

A ChannelWatermark is a named, reusable overlay configuration. A single watermark record can be assigned to a channel (applied to all content on that channel) or overridden on individual schedule items, block items, or Deco configurations.

Watermark Fields

Name
string
required
A label for this watermark (e.g. Channel 5 Bug, Network Logo). Used in dropdowns throughout the UI.
Mode
ChannelWatermarkMode enum
Controls when the watermark is visible.
ValueBehaviour
NoneWatermark is disabled; no overlay is rendered
PermanentWatermark is always visible for the entire duration of every item
IntermittentWatermark appears periodically; controlled by FrequencyMinutes and DurationSeconds
OpacityExpressionWatermark opacity is driven by a custom expression (see OpacityExpression)
ImageSource
ChannelWatermarkImageSource enum
Selects where the overlay image comes from.
ValueDescription
CustomUse the image file uploaded to ErsatzTV (stored in the Image field)
ChannelLogoUse the channel’s own logo artwork (configured on the channel record)
ResourceInternal use; reserved for system-generated graphics (value 100)
Image
string
Relative path or identifier of the custom image file. Only used when ImageSource is Custom. Supported formats: PNG, JPEG, GIF (static frame only).
Location
WatermarkLocation enum
Screen position of the watermark overlay.
ValuePosition
BottomRightBottom-right corner (default)
BottomLeftBottom-left corner
TopRightTop-right corner
TopLeftTop-left corner
TopMiddleTop centre
RightMiddleCentre-right
BottomMiddleBottom centre
LeftMiddleCentre-left
MiddleCenterDead centre of the frame
Size
WatermarkSize enum
How the watermark image dimensions are interpreted.
ValueBehaviour
ScaledThe image is scaled relative to the video frame using WidthPercent
ActualSizeThe image is rendered at its native pixel dimensions
WidthPercent
double
When Size is Scaled, this is the watermark width as a percentage of the output video width (e.g. 10.0 = 10% of frame width). The height is scaled proportionally.
HorizontalMarginPercent
double
Distance from the nearest horizontal edge, expressed as a percentage of the frame width. Used to inset the logo away from the frame edge.
VerticalMarginPercent
double
Distance from the nearest vertical edge, expressed as a percentage of the frame height.
FrequencyMinutes
int
For Intermittent mode: the interval in minutes between watermark appearances.
DurationSeconds
int
For Intermittent mode: how many seconds the watermark remains visible each time it appears.
Opacity
int (0–100)
Fixed opacity of the watermark as a percentage. 100 = fully opaque. 0 = invisible (but still processed). Overridden by OpacityExpression when Mode is OpacityExpression.
OpacityExpression
string
A dynamic expression evaluated per frame to determine watermark opacity. Used with Mode = OpacityExpression for fade-in/fade-out effects. Expressions follow FFmpeg’s enable expression syntax relative to the media item’s timestamp.
PlaceWithinSourceContent
bool
When true, the watermark is composited inside the active picture area of the source video (respecting letterbox/pillarbox padding). When false, it is placed over the full output frame including padding bars.
ZIndex
int
Z-order for layering multiple watermarks. Higher values appear on top of lower values when two overlays occupy the same screen region.

Assigning Watermarks

Watermarks can be attached at multiple levels, with more specific assignments overriding broader ones:
1

Channel-level watermark

Go to Channels, edit a channel, and set the Watermark field. This watermark applies to all content playing on that channel unless overridden.
2

Schedule item watermark

In a programme schedule, individual items can specify their own watermark. This overrides the channel-level watermark for the duration of that item.
3

Block item watermark

Block schedule items similarly support a per-item watermark override.
4

Deco watermark

Deco configurations (see Decos below) can define a watermark that applies to all items in the Deco’s scope, with DecoMode controlling whether it is inherited, disabled, or merged with other watermarks.

Filler Presets

A FillerPreset defines a named collection of media content and rules for how ErsatzTV should select and insert that content to fill time gaps in the schedule. Filler can pad to exact minute boundaries, add a fixed number of clips, or play tail content after the main item finishes.

FillerPreset Fields

Name
string
required
A label for this preset (e.g. 30-Second Commercials, Movie Bumpers, Dead Air Loop).
FillerKind
FillerKind enum
The role this filler plays in the playout.
ValueDescription
NoneNo specific role; generic filler
PreRollInserted before the main programme item begins
MidRollInserted at chapter markers or mid-points during the item
PostRollInserted immediately after the main programme item ends
TailShort content appended to fill out a time slot to the next item’s start
FallbackPlayed when no scheduled content is available (dead air prevention)
GuideModeInternal guide generation mode (value 99); not for general use
DecoDefaultDefault filler for Deco configurations (value 100)
FillerMode
FillerMode enum
Determines how much filler content is inserted each time the preset fires.
ValueDescription
NoneMode is unset
DurationInsert filler until the total filler duration equals Duration
CountInsert exactly Count items from the collection
PadInsert filler to pad the schedule to the next PadToNearestMinute boundary
RandomCountInsert a random number of items up to Count
Duration
TimeSpan?
Target duration for FillerMode.Duration. ErsatzTV inserts items from the filler collection until this total duration is reached.
Count
int?
Number of items for FillerMode.Count and upper bound for FillerMode.RandomCount.
PadToNearestMinute
int?
Used with FillerMode.Pad. ErsatzTV pads to the nearest multiple of this many minutes (e.g. 5 pads to the next 5-minute boundary).
AllowWatermarks
bool
When true, the channel watermark is displayed during filler content. When false, the watermark is suppressed for filler items.
CollectionType
CollectionType enum
The kind of media collection from which filler items are drawn.
Expression
string
A custom scripted expression for advanced filler selection logic.
UseChaptersAsMediaItems
bool
When true, individual chapter markers within a media file are treated as separate filler items, allowing fine-grained padding with a single multi-chapter file.

Filler Attachment Points

Filler presets are attached to channels and schedule items at several levels:

Channel Fallback Filler

Set on the Channel record (FallbackFillerId). Plays continuously when there is no scheduled content — prevents dead air on the channel. Assign a looping collection or long-duration media as the fallback.

Schedule Item Filler

Attached directly to individual programme schedule items. Controls pre-roll, post-roll, or tail content specific to that item’s time slot.
Configure channel fallback filler:
1

Create a Filler Preset

Go to Filler Presets and click Add Filler Preset. Choose Fallback as the FillerKind, set the collection, and configure FillerMode (typically Pad or Duration).
2

Assign to the Channel

Edit your channel and set the Fallback Filler field to your new preset. ErsatzTV will play this content whenever the schedule runs out of items.

Decos

Decos are decoration configuration objects that can be applied to block-based playouts. A Deco bundles together a watermark, graphics elements, default filler, dead-air fallback, and break content into one reusable unit. Decos are organised into Deco Groups and assigned to block playouts.

Deco Fields

SectionFieldDescription
WatermarkWatermarkModeDecoMode — whether to inherit, disable, override, or merge the watermark
UseWatermarkDuringFillerWhether the Deco watermark should also appear during filler items
GraphicsGraphicsElementsModeDecoMode — controls graphics element overlay inheritance
UseGraphicsElementsDuringFillerWhether graphics elements show during filler
Default fillerDefaultFillerModeDecoMode — inherit, disable, override, or merge default filler
DefaultFillerTrimToFitTrim the filler item to fit exactly into the remaining gap
Dead-air fallbackDeadAirFallbackModeDecoMode — controls what plays on dead air within this Deco scope
Break contentBreakContentModeDecoMode — controls break content insertion

DecoMode Values

ValueDescription
InheritUse the setting from the parent scope (channel or schedule default)
DisableExplicitly suppress this Deco feature
OverrideReplace any inherited setting with this Deco’s own value
MergeCombine this Deco’s value with the inherited value (e.g. merge watermark lists)

Break Content

DecoBreakContent defines media inserted at break points within a block. Each break-content entry references a media collection and a DecoBreakPlacement:
DecoBreakPlacementDescription
BlockStartInsert break content at the very beginning of the block
BlockFinishInsert break content at the very end of the block
BetweenBlockItemsInsert break content between every pair of block items
ChapterMarkersInsert break content at chapter marker points within items

Graphics Elements

A GraphicsElement is an overlay asset (image, text, subtitle, motion graphic, or script) that can be composited on top of video output. Graphics elements are more flexible than watermarks — they support different rendering kinds and can be attached to schedule items, block items, or Deco configurations.

GraphicsElementKind Values

ValueDescription
ImageStatic image file overlay (PNG, JPEG)
TextDynamic text rendered over the video
SubtitleSubtitle-styled overlay
MotionAnimated overlay (motion graphic file)
ScriptScript-driven overlay with dynamic content
Graphics elements are managed in Settings → Graphics Elements and associated with schedule items via the ProgramScheduleItemGraphicsElements relationship, or with Decos via DecoGraphicsElements.

Slug Seconds

Slug seconds is a per-channel setting that inserts a brief black video segment between consecutive playout items. This mimics the brief cut-to-black seen between segments on traditional broadcast television.
  • Set on the Channel record as SlugSeconds (type double?).
  • A value of null or 0 disables slug insertion.
  • Typical values: 0.52.0 seconds.
  • During the slug, the channel produces silent black frames, so watermarks and graphics elements are suppressed.
// Channel create/update request excerpt
{
  "SlugSeconds": 1.0
}
Use a SlugSeconds value of 1.0 with filler presets that contain short commercial bumpers for an authentic broadcast feel. The black frame provides a clean visual break between the bumper and the next programme item.

FFmpeg Profiles

Configure the transcoding settings that apply watermark filters to the video stream.

Streaming Modes

Understand how watermarks and filler are included in each streaming output mode.

Build docs developers (and LLMs) love