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

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

A Block is the fundamental unit of block scheduling. Each block has:

Block Items

Each BlockItem within a block references a content source and a playback order:
Block items use the same PlaybackOrder enum as classic schedule items: Chronological, SeasonEpisode, Shuffle, ShuffleInOrder, MultiEpisodeShuffle, Random, RandomRotation, and Marathon.

Block Groups

A BlockGroup 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

A Template defines a full day’s programming grid by mapping blocks to start times:

Template Items

Each TemplateItem binds a Block to a StartTime (a TimeSpan from midnight):
Multiple 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

A TemplateGroup organizes templates just as BlockGroup organizes blocks. Group templates by programming season, day type, or content category.

Playout Templates

A PlayoutTemplate is the rule that activates a template for a playout on specific dates. It implements the same IAlternateScheduleItem interface used by classic schedule alternates:
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 using PlayoutHistory 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.
This history allows block schedules to resume from the correct position in a collection across playout rebuilds, which is especially important for long-running series or shuffle-order collections that need to avoid repeating recent items.

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. Each Deco belongs to a DecoGroup and configures four overlay categories:

Watermarks

Graphics Elements

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 a DefaultFillerMode (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 a DeadAirFallbackMode (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 a BreakContentMode (DecoMode) field: Each 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:

Deco Templates

A DecoTemplate 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

1

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.
2

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.
3

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.
4

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.
5

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.
6

Rebuild the playout

Save the playout configuration. ErsatzTV will rebuild the playout using your template and block definitions. The program guide will reflect the block-based schedule going forward.

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.