Skip to main content
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

string
required
A label for this watermark (e.g. Channel 5 Bug, Network Logo). Used in dropdowns throughout the UI.
ChannelWatermarkMode enum
Controls when the watermark is visible.
ChannelWatermarkImageSource enum
Selects where the overlay image comes from.
string
Relative path or identifier of the custom image file. Only used when ImageSource is Custom. Supported formats: PNG, JPEG, GIF (static frame only).
WatermarkLocation enum
Screen position of the watermark overlay.
WatermarkSize enum
How the watermark image dimensions are interpreted.
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.
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.
double
Distance from the nearest vertical edge, expressed as a percentage of the frame height.
int
For Intermittent mode: the interval in minutes between watermark appearances.
int
For Intermittent mode: how many seconds the watermark remains visible each time it appears.
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.
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.
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.
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

string
required
A label for this preset (e.g. 30-Second Commercials, Movie Bumpers, Dead Air Loop).
FillerKind enum
The role this filler plays in the playout.
FillerMode enum
Determines how much filler content is inserted each time the preset fires.
TimeSpan?
Target duration for FillerMode.Duration. ErsatzTV inserts items from the filler collection until this total duration is reached.
int?
Number of items for FillerMode.Count and upper bound for FillerMode.RandomCount.
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).
bool
When true, the channel watermark is displayed during filler content. When false, the watermark is suppressed for filler items.
CollectionType enum
The kind of media collection from which filler items are drawn.
string
A custom scripted expression for advanced filler selection logic.
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

DecoMode Values

Break Content

DecoBreakContent defines media inserted at break points within a block. Each break-content entry references a media collection and a DecoBreakPlacement:

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

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.5–2.0 seconds.
  • During the slug, the channel produces silent black frames, so watermarks and graphics elements are suppressed.
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.