Playlist Structure

The engine builds playlists in three nested levels. Every setting described in these docs acts on one of them, so it pays to know all three.

Level Size What it is

Block

The block duration you set (typically 60 or 120 seconds)

The rhythm unit of the playlist. Campaign frequencies and starting blocks are expressed in blocks.

Loop

One or more blocks

The shortest stretch of playlist after which the pattern repeats. The engine plans one loop; the screen plays it over and over.

Media plan

Loop repeated across calendar time

The final schedule delivered to the screen, bounded by each campaign’s activity windows.

Loop is the standard DOOH industry name for the repeating rotation of a screen’s content, and these docs use it throughout. The playlist, block, and frequency settings of the product interface together define the loop.

Blocks

A block is a fixed-length segment of the playlist. Think of it as one "round" of advertising: a campaign that plays once per block appears once in every round.

block-slots

Each cell is a slot — one position occupied by a single ad or filler for its duration. A, B and C are three campaigns; widths are drawn to scale, so the filler visibly plugs the time no campaign asked for.

Blocks matter because two settings are defined in terms of them:

  • Frequency — how many times a campaign plays per block.

  • Starting block — which block a low-frequency campaign first appears in.

The loop

If every campaign played once per block, every block would be identical and the loop would be a single block. Real playlists are richer than that, and the loop grows to cover the variety:

  • A campaign that plays once every 2 blocks forces a loop of at least 2 blocks — one block with the campaign, one without.

  • Campaigns with different periods stretch the loop until it contains a whole number of plays of every campaign.

  • A campaign whose ads have different lengths stretches the loop until every ad variant has appeared.

The loop is always the least common multiple of these rhythms. This is why mixing many unrelated periods (say, 45 s, 70 s, and 240 s at a 60-second block) produces a long loop, while harmonious periods (60 s, 120 s, 240 s) keep it short. For practical guidance on choosing periods, see Choosing periods that work well together.

The media plan

The media plan is the final schedule delivered to the screen. It takes the loop and repeats it across calendar time, bounded by each campaign’s activity windows.

A media plan is therefore a sequence of loops. Whenever a campaign’s activity window opens or closes, the set of campaigns on air changes, the engine replans, and the screen starts playing a different loop:

media-plan

Within each stretch the same loop repeats over and over; at the boundary the engine produces a new one.

Playback is circular

The playlist loops: after the last spot, the screen returns to the first.

loop-cycle

The engine plans for this — all spacing guarantees hold across the loop boundary as well as inside it. A campaign standing both last and first in the loop would play twice in a row on air, and the engine treats that exactly like any other back-to-back violation.

What the engine guarantees

For every planned loop:

  • Each campaign gets exactly the number of spots its frequency implies — no more, no fewer.

  • Two spots of the same campaign never play back to back, including across the loop boundary.

  • Two campaigns sharing a separation category never play back to back.

  • Under policies that require full blocks, all air time is occupied — remaining time is covered by fillers.

  • Spots of each campaign are spread as evenly as the whole mix allows — see Planning Quality for how "as evenly as possible" is measured and reported.

Blocks are not always exactly nominal

When a campaign rotates ads of different lengths, blocks in the loop differ slightly: the block carrying the long ad runs a little over the nominal duration, the block carrying the short one a little under. The drift never exceeds the difference between the campaign’s longest and shortest ad, and it balances out across the loop. This is expected behavior — see Groups with different footprints.