In-scene ads in VAST XML
An in-scene ad is placed inside the content frame itself: a brand on a billboard in the background, a product on a table, a logo on a wall that was not there when the scene was shot. It is one of the six CTV Ad Portfolio formats and the one that sits furthest from what a VAST document can describe.
The reason is structural. Every other format is a rectangle the player draws at a known position. In-scene placement is decided by whoever composites the ad into the content, and that decision is made by a rendering pipeline or an SSAI stitcher that the tag never describes. VAST carries the asset and the signals. It does not carry the scene.
Quick reference
| VAST element | <NonLinear> inside <NonLinearAds> |
| Declare version | 4.2 or 4.3. Not 4.4 |
| plcmt | 9 |
| playbackmethod | 1 or 2, the pre-portfolio values |
| Placement decided by | The compositing pipeline, not the tag |
An in-scene tag
<VAST version="4.2" xmlns="http://www.iab.com/VAST">
<Ad id="inscene-1">
<InLine>
<AdSystem version="1.0">My Ad Server</AdSystem>
<AdTitle>In-scene brand placement</AdTitle>
<AdServingId>9b0c-scene-0231</AdServingId>
<Impression><![CDATA[https://track.example.com/imp]]></Impression>
<Creatives>
<Creative id="c1">
<UniversalAdId idRegistry="Ad-ID">SCENE3456</UniversalAdId>
<NonLinearAds>
<NonLinear width="512" height="288">
<Duration>00:00:08</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4" width="512" height="288">
<![CDATA[https://cdn.example.com/inscene-asset.mp4]]>
</MediaFile>
</MediaFiles>
</NonLinear>
<TrackingEvents>
<Tracking event="creativeView"><![CDATA[https://track.example.com/view]]></Tracking>
<Tracking event="overlayViewDuration"><![CDATA[https://track.example.com/duration]]></Tracking>
</TrackingEvents>
</NonLinearAds>
</Creative>
</Creatives>
<Extensions>
<Extension type="plcmt" ext="adcom"><plcmt>9</plcmt></Extension>
<Extension type="playbackmethod" ext="adcom"><playbackmethod>2</playbackmethod></Extension>
<Extension type="attr" ext="adcom"><attr>21</attr></Extension>
</Extensions>
</InLine>
</Ad>
</VAST>What the tag can and cannot say
In-scene attracts more claims than any other portfolio format, so it helps to be exact about which of them live in the document.
The tag carries the format via plcmt 9, the asset and its dimensions, the media type, whether a renderable file exists, how long the creative runs, whether the delivered experience is static or moving via attr, and where the impression and interaction events go.
It says nothing about where in the frame the ad landed, whether an actor walked in front of it, how much of it was visible, or whether the composite looked deliberate. Those are rendering outcomes, and they come from the publisher or from a measurement vendor with access to the composited output.
Every VAST format works this way. The document declares the creative and the environment decides the render. In-scene only makes the division harder to ignore, because the environment is doing more of the work than usual.
Why attr matters more here
In-scene assets are frequently static by design. A logo composited onto a wall should not move, because movement destroys the illusion that it belongs in the scene. The portfolio gives you three values to be honest about that: 21 static visual, 22 limited motion, 23 full motion.
Declaring 21 for a genuinely static asset does real work. A publisher whose pipeline only supports still composites can accept your creative on the strength of it, and one that expects motion can reject it before delivery rather than after. VASTlint flags a value outside the motion set as VAST-4.4-adcom-attr-not-motion.
Duration on an ad that is part of the scene
In-scene exposure is bounded by the shot, not by the creative. The asset may be a five-second loop composited into a scene that runs for forty. So <Duration> describes the asset, and overlayViewDuration is the number anyone reporting on the campaign wants.
Declare it anyway on a video MediaFile. Without it the measurement layer has no timeline, which VASTlint reports as VAST-4.4-nonlinear-video-no-duration.
SSAI makes the fallback rule non-negotiable
In-scene delivery frequently runs through a compositing or server-side insertion pipeline, which means the entity rendering your creative is not a client player with a SIMID runtime. An interactive-only NonLinear has nothing to render in that path.
Ship a renderable MediaFile. VASTlint reports the absence as VAST-4.4-nonlinear-no-renderable-asset, and in an SSAI path the failure is silent: the stitch simply produces content with no ad in it.
Common mistakes checklist
- Expecting the tag to control placement. It does not. Coordinate the composite with the publisher.
- Declaring motion on a static asset. Publishers filter on this, and the mismatch is visible to them.
- Omitting dimensions. The compositor needs a source size even when it scales.
- Interactive-only creative in an SSAI path. Nothing renders and nothing reports.
- Treating creative duration as exposure. The scene decides exposure. Use the duration tracking event.
- Declaring version 4.4. Use 4.2 or 4.3.