Side-by-Side / Double Box — Creative Specs
Layout overview
StreamLayer's Double Box unit is a CTV/web/mobile interactive ad surface that uses a squeezeback model:
- Left box: the publisher's live video, squeezed in place during the ad opportunity. No asset required from the demand partner — this is the publisher's broadcast.
- Right box: the ad creative — video or static image, supplied by the demand partner.
- Backdrop: a full-bleed background image (landscape + portrait variants).
- Header: brand logo + title text.
- Footer: description + CTA button.
The end user is never blocked from the underlying broadcast — they continue watching while the ad is on screen.
┌───────────────────────────────────────────────────────────────┐
│ [Header Logo] │
│ Title │
│ ┌─────────────────────────┐ ┌─────────────────────────┐ │
│ │ │ │ │ │
│ │ Publisher live video │ │ Ad creative │ │
│ │ (squeezed) │ │ (Media — 16:9) │ │
│ │ │ │ │ │
│ └─────────────────────────┘ └─────────────────────────┘ │
│ Description [ CTA Button ] │
│ │
│ (Background image fills behind) │
└───────────────────────────────────────────────────────────────┘
Asset checklist
| # | Asset | Required | Format | Dimensions |
|---|---|---|---|---|
| 1 | Square Logo | Yes | PNG or JPG (1:1) | 140 × 140 px |
| 2 | Full Transparent Logo | Yes | Transparent PNG | Height 140 px, proportional width |
| 3 | Main Media (right box) | Yes | PNG or MP4 | 1920 × 1080 px (16:9) |
| 4 | Background — Landscape | Yes | PNG | 2560 × 1440 px (16:9) |
| 5 | Background — Portrait | Yes | PNG | 1000 × 1500 px (2:3) |
| 6 | Advertiser Name | Yes | Text | ≤ 30 chars |
| 7 | Ad Name | Yes | Text | ≤ 30 chars |
| 8 | Title | Yes | Text | ≤ 30 chars |
| 9 | Description | Yes | Text | ≤ 80 chars |
| 10 | CTA Button text | Yes | Text | ≤ 25 chars |
| 11 | CTA destination URL | Yes | URL | Standard click-through |
Brand logos
Square Logo
- Purpose: Used in StreamLayer Studio / ad management lists. Not visible to end users in the rendered ad.
- Format: PNG or JPG
- Aspect ratio: 1:1 (square)
- Recommended dimensions: 140 × 140 px
Full Transparent Logo
- Purpose: Rendered inside the ad as the header logo at the top of the unit. Visible to end users.
- Format: Transparent PNG
- Recommended height: 140 px (width scales proportionally)
- Notes: The logo must be legible on a dark backdrop. Avoid hard edges and rely on transparency.
Main Media (right box — ad creative)
| Property | Value |
|---|---|
| Format | PNG (static image) or MP4 (video) |
| Aspect ratio | 16:9 (cropped if not exact) |
| Recommended dimensions | 1920 × 1080 px |
| Video playback | Auto-plays on render |
| Audio | Muted by default (TBD — pending confirmation) |
| Duration (video) | 6–30s recommended for CTV |
Codec / bitrate guidance for MP4:
- Codec: H.264 (baseline or main profile)
- Bitrate: 2–5 Mbps for 1080p
- Frame rate: 24, 25, or 30 fps
- Audio: AAC, 128 kbps stereo (if any)
Background images
The background fills the entire unit behind both boxes. Two variants are required to support both orientations.
Landscape (CTV / tvOS / Android TV / landscape web)
- Format: PNG
- Recommended dimensions: 2560 × 1440 px (16:9)
- Notes: Keep brand-critical elements away from the center, since the two media boxes overlap that area. Brand fades, gradients, or subtle textures work best.
Portrait (mobile portrait)
- Format: PNG
- Recommended dimensions: 1000 × 1500 px (2:3)
Text fields
| Field | Max characters | Where it renders |
|---|---|---|
| Advertiser Name | 30 | Brand attribution metadata |
| Ad Name | 30 | Internal campaign identifier (not visible to end users) |
| Title | 30 | Headline above the two media boxes |
| Description | 80 | Sub-text under the media |
| CTA Button | 25 | Action button label (e.g. "Learn More", "Shop Now") |
Truncation: Strings exceeding the limit are truncated client-side. Pre-truncate at the source.
Behavior controls (configured on the StreamLayer side — informational only)
These don't require creative assets from the demand partner. They're listed here so designers understand the unit's runtime behavior.
| Control | Options |
|---|---|
| Close Timer | No Timer / 5s / 10s / 15s / 30s / 60s |
| CTA Button Type | Basic (URL click-through) / Add to Wallet / Return to Video / Send to User (QR code) / No Button |
Sample VAST response
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="4.2" xmlns="http://www.iab.com/VAST">
<Ad id="ad-12345" sequence="1">
<InLine>
<AdSystem version="1.0">ExampleDSP</AdSystem>
<AdTitle><![CDATA[Discover the Collection]]></AdTitle>
<Description><![CDATA[New season. Now available.]]></Description>
<Advertiser><![CDATA[Example Brand]]></Advertiser>
<Pricing model="CPM" currency="USD">25.00</Pricing>
<Impression id="imp-1"><![CDATA[https://impressions.example-dsp.com/imp?id=12345&cb=[CACHEBUSTING]]]></Impression>
<Creatives>
<Creative id="creative-1" sequence="1">
<Linear>
<Duration>00:00:15</Duration>
<TrackingEvents>
<Tracking event="start"><![CDATA[https://t.example-dsp.com/start?id=12345]]></Tracking>
<Tracking event="firstQuartile"><![CDATA[https://t.example-dsp.com/q1?id=12345]]></Tracking>
<Tracking event="midpoint"><![CDATA[https://t.example-dsp.com/mid?id=12345]]></Tracking>
<Tracking event="thirdQuartile"><![CDATA[https://t.example-dsp.com/q3?id=12345]]></Tracking>
<Tracking event="complete"><![CDATA[https://t.example-dsp.com/complete?id=12345]]></Tracking>
<Tracking event="mute"><![CDATA[https://t.example-dsp.com/mute?id=12345]]></Tracking>
<Tracking event="unmute"><![CDATA[https://t.example-dsp.com/unmute?id=12345]]></Tracking>
</TrackingEvents>
<VideoClicks>
<ClickThrough id="ct-1"><![CDATA[https://example-brand.com/spring-collection]]></ClickThrough>
<ClickTracking id="clk-1"><![CDATA[https://t.example-dsp.com/click?id=12345]]></ClickTracking>
</VideoClicks>
<MediaFiles>
<MediaFile id="hd"
delivery="progressive"
type="video/mp4"
width="1920" height="1080"
bitrate="3500"
codec="avc1.4d401f">
<![CDATA[https://cdn.example-dsp.com/creatives/12345/1080p.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
<Extensions>
<Extension type="streamlayer/double-box/v1">
<DoubleBox>
<AdName><![CDATA[Spring 2026 — Double Box]]></AdName>
<Backgrounds>
<Background orientation="landscape" width="2560" height="1440" type="image/png">
<Url><![CDATA[https://cdn.example-dsp.com/creatives/12345/bg-landscape.png]]></Url>
</Background>
<Background orientation="portrait" width="1000" height="1500" type="image/png">
<Url><![CDATA[https://cdn.example-dsp.com/creatives/12345/bg-portrait.png]]></Url>
</Background>
</Backgrounds>
<Logos>
<Logo role="header" width="140" height="140" type="image/png">
<Url><![CDATA[https://cdn.example-dsp.com/brand/logo-transparent.png]]></Url>
</Logo>
<Logo role="square" width="140" height="140" type="image/png">
<Url><![CDATA[https://cdn.example-dsp.com/brand/logo-square-140.png]]></Url>
</Logo>
</Logos>
<CTA>
<Label><![CDATA[Shop Now]]></Label>
<Type>basic</Type>
</CTA>
</DoubleBox>
</Extension>
</Extensions>
</InLine>
</Ad>
</VAST>Notes:
- Standard VAST 4.2. Video, impression, tracking, and click-through all live in spec nodes. Nothing custom inside
<Linear>. - All StreamLayer-specific fields go in a single
<Extension type="streamlayer/double-box/v1">. Thetypeattribute versions the contract. - Dimensions are attributes (
width/height) on the element, not nested. - Enums:
Background.orientation:landscape|portraitLogo.role:header|squareCTA.Type:basic|add_to_wallet|return_to_video|send_to_user|none
- The
type(MIME) attribute on backgrounds and logos is optional but recommended for pre-validation. - Do not put video, tracking, impression, or click-through inside the Extension — they belong in the standard nodes.
- Macros substituted in URLs:
[CACHEBUSTING],[TIMESTAMP],[CONTENTPLAYHEAD]. - Character limits:
AdTitle≤ 30,Description≤ 80,Advertiser≤ 30,AdName≤ 30,CTA.Label≤ 25. - VAST wrappers (
VASTAdTagURI) are supported (rolling out). Please fire<Error>pixels per-layer on failure, per spec.
Updated about 14 hours ago
