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