Block schedules bring a template-based approach to channel programming. Instead of a single linear list of items, you define reusable Blocks that encapsulate a fixed duration of programming content, organize them into Templates that describe a full day’s schedule, and attach those templates to your playouts with flexible date-range rules. A separate Deco system lets you layer watermarks, filler, fallback content, and break material on top of any block-based playout without modifying the underlying blocks. This design makes it easy to build consistent channel grids and swap seasonal themes independently of your content structure.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.
Core Concepts
Blocks
A named, duration-based programming unit that contains one or more content items (BlockItems). Blocks are the reusable building blocks of your schedule.
Templates
A daily schedule layout that maps blocks to specific start times. Templates describe what your channel looks like on any given day.
Playout Templates
The rule that connects a playout to a template. Defines which days of the week, days of the month, and months of the year — or a hard date range — a template is active.
Decos
A decorative overlay configuration attached to a playout or template. Controls watermarks, filler, dead-air fallback, and break content independently of block content.
Blocks
ABlock is the fundamental unit of block scheduling. Each block has:
| Field | Description |
|---|---|
| Name | A human-readable label for the block (e.g., Prime Time Drama, Morning Cartoons). |
| Minutes | The total duration of the block in minutes. ErsatzTV schedules content within this window. |
| BlockGroup | An organizational container grouping related blocks together (e.g., Kids Blocks, Evening Blocks). |
| StopScheduling | Controls whether content stops before or after the block’s duration end. AfterDurationEnd lets the last item play out; BeforeDurationEnd hard-stops at the boundary. |
| Items | The ordered list of BlockItem objects that define the content to play. |
| DateUpdated | Timestamp of the last modification, used by the playout engine to detect changes. |
Block Items
EachBlockItem within a block references a content source and a playback order:
| Field | Description |
|---|---|
| Index | The position of this item within the block’s item list. |
| CollectionType | The type of content: Collection, MultiCollection, SmartCollection, MediaItem, SearchQuery, etc. |
| PlaybackOrder | How items are selected from the collection (Chronological, SeasonEpisode, Shuffle, etc.). |
| IncludeInProgramGuide | When enabled, this item’s content appears as a distinct entry in the EPG. |
| DisableWatermarks | Suppresses all watermark overlays for this specific block item. |
| Watermarks / GraphicsElements | Per-item override watermarks and graphics elements applied while this item is playing. |
Block items use the same
PlaybackOrder enum as classic schedule items: Chronological, SeasonEpisode, Shuffle, ShuffleInOrder, MultiEpisodeShuffle, Random, RandomRotation, and Marathon.Block Groups
ABlockGroup is a simple container with a Name and a collection of Block objects. Use block groups to organize your blocks by theme, daypart, or channel — for example, Daytime Blocks, Evening Blocks, and Weekend Blocks.
Templates
ATemplate defines a full day’s programming grid by mapping blocks to start times:
| Field | Description |
|---|---|
| Name | A descriptive label (e.g., Standard Weekday, Saturday Morning). |
| TemplateGroup | An organizational container grouping related templates. |
| Items | The list of TemplateItem objects, each assigning a block to a start time. |
| DateUpdated | Timestamp used to detect template changes during playout rebuilds. |
Template Items
EachTemplateItem binds a Block to a StartTime (a TimeSpan from midnight):
TemplateItem entries form the daily grid. ErsatzTV works through them in start-time order and fills any gaps between items with the deco’s default filler or offline time.
Template Groups
ATemplateGroup organizes templates just as BlockGroup organizes blocks. Group templates by programming season, day type, or content category.
Playout Templates
APlayoutTemplate is the rule that activates a template for a playout on specific dates. It implements the same IAlternateScheduleItem interface used by classic schedule alternates:
| Field | Description |
|---|---|
| Template | The template to activate when this rule matches. |
| DecoTemplate | An optional DecoTemplate that overrides the playout’s default deco configuration for this rule. |
| Index | Priority order when multiple rules match the same date (lower index wins). |
| DaysOfWeek | Which days of the week this rule applies to (Monday–Sunday). |
| DaysOfMonth | Which calendar days (1–31) this rule applies to. |
| MonthsOfYear | Which months (1–12) this rule applies to. |
| LimitToDateRange | When true, additionally constrains the rule to the specified start/end date. |
| StartMonth / StartDay | Inclusive start of the date range (month and day). |
| StartYear | Optional year for the range start. When null, the rule applies to any year. |
| EndMonth / EndDay | Inclusive end of the date range (month and day). |
| EndYear | Optional year for the range end. When null, the rule applies to any year. |
Block schedule alternates work through the
PlayoutTemplate list in Index order. The first matching rule wins. You can stack many PlayoutTemplate entries on a single playout to model complex seasonal programming calendars — for example, a Christmas special template that only applies December 25th of a specific year.Playout History
ErsatzTV tracks which content has been played within each block usingPlayoutHistory records. Each record stores:
- The Block and PlaybackOrder associated with the history entry.
- A Key that uniquely identifies the collection within the block, and an optional ChildKey for sub-collections (e.g., individual playlist items).
- The Index within the collection where playback was last left off.
- When the item last aired and Finish (when it ended), used to prune stale history efficiently.
- Details serialized as JSON for richer per-item state.
Decos
A Deco is a named overlay configuration attached to a block-schedule playout. Decos separate the decoration of a channel (logos, bumpers, fallback content) from the programming (blocks and templates), allowing you to update the look and feel of a channel without touching any content items. EachDeco belongs to a DecoGroup and configures four overlay categories:
Watermarks
| Field | Description |
|---|---|
| WatermarkMode | Inherit, Disable, Override, or Merge — controls how this deco’s watermarks interact with item-level watermarks. |
| Watermarks | The list of ChannelWatermark overlays to display. |
| UseWatermarkDuringFiller | When true, watermarks remain visible during filler content. |
Graphics Elements
| Field | Description |
|---|---|
| GraphicsElementsMode | Inherit, Disable, Override, or Merge. |
| GraphicsElements | The graphics elements (lower-thirds, bugs, tickers) to display. |
| UseGraphicsElementsDuringFiller | When true, graphics remain active during filler. |
Default Filler
The deco defines a default filler source that fills time gaps between block items and any unscheduled time in the template. This is controlled by aDefaultFillerMode (DecoMode) and configured with a DefaultFillerCollectionType, a reference to the filler collection, and a DefaultFillerTrimToFit flag that controls whether the filler clip is cut to exactly fit the gap.
Dead Air Fallback
A separate content source used when the channel would otherwise produce silence or a black screen. Controlled by aDeadAirFallbackMode (DecoMode) and configured with a DeadAirFallbackCollectionType and a reference to the fallback collection.
Break Content
Decos can insert break content between block items at configurable placement points. This section is governed by aBreakContentMode (DecoMode) field:
| Placement | Description |
|---|---|
BlockStart | Break content plays at the beginning of a block. |
BlockFinish | Break content plays at the end of a block. |
BetweenBlockItems | Break content is inserted between each item within the block. |
ChapterMarkers | Break content is inserted at chapter marker boundaries within items. |
DecoBreakContent entry specifies a collection source and a DecoBreakPlacement value.
Deco Mode Values
DecoMode controls how a deco’s configuration interacts with any configuration inherited from the playout or item level:
| Mode | Behavior |
|---|---|
Inherit | Use the setting from the parent context (playout or item). |
Disable | Explicitly turn off this feature for this deco. |
Override | Replace the parent’s configuration entirely with this deco’s settings. |
Merge | Combine this deco’s settings with the parent’s configuration. |
Deco Templates
ADecoTemplate defines a time-based deco schedule: it maps Deco objects to time windows within a day using DecoTemplateItem entries. Each DecoTemplateItem has a StartTime and EndTime, allowing you to, for example, apply a kids-channel deco from 6 AM to 7 PM and switch to an adult-oriented deco in the evening.
DecoTemplate objects belong to a DecoTemplateGroup and are referenced by PlayoutTemplate records to activate a specific deco schedule alongside a content template.
Creating a Block Schedule
Create your blocks
Navigate to Scheduling → Blocks and click Add Block. Give it a name (e.g.,
Evening Movie) and set the Minutes (e.g., 120). Add one or more Block Items, each pointing to a collection and a playback order. Save the block.Organize blocks into a group (optional)
Under Block Groups, create a group (e.g.,
Evening Blocks) and add your related blocks to it for easier navigation.Create a template
Navigate to Scheduling → Templates and click Add Template. Name it (e.g.,
Standard Weekday). Add Template Items — for each item, select a block and a start time (e.g., Evening Movie at 20:00). Save the template.Create a deco (optional)
Navigate to Scheduling → Decos and click Add Deco. Configure watermarks, default filler, dead-air fallback, and break content as needed. Save the deco.
Attach the template to your playout
Open your channel’s Playout configuration and switch to the Templates tab. Click Add Template Rule. Select your template, choose which days of the week it applies to, and optionally restrict it to a date range. If you created a deco or deco template, link it here as well. Set the Index (priority) if you have multiple rules.
Tips and Best Practices
Reuse blocks across templates
A single block (e.g.,
Morning News) can appear in multiple templates at different times. Changes to the block’s content immediately affect every template that references it.Use BlockStopScheduling carefully
Set
BeforeDurationEnd when you need hard time boundaries (e.g., a news block must end at the top of the hour). Use AfterDurationEnd for movie blocks where running a few minutes long is acceptable.Layer decos for seasonal themes
Create separate decos for different seasons or holidays. Use
PlayoutTemplate date-range rules to swap in the holiday deco without changing any block or template content.Use DecoMode Merge for inherited watermarks
Set a channel-level watermark in the playout and use
Merge in your deco to add a secondary logo on top, rather than replacing the base watermark entirely.