A standard for rich creative definitions.
The goal of this project is to create a standard for defining rich media objects including, but not limited to, digital ad creatives. The reasons that a universal standard may be desirable include:
- Simplified, manual or automated exachange of creatives between agencies and digital platforms. Eg, answer "what are the specs?" for both people and machines.
- Defined creative properties, or viewed from another angle, inputs, which allow manual or automatic reconfiguration of a creative's properties, perhaps machine learning or artificial intellligence. For example, a product ad could be dynamically reconfigured to display different products depending on any number of contextual hints or user traits. Platforms today achieve this through closed, clumsy, and proprietary means.
- The ability to validate and verify limits on a creative's final file size, perhaps ameliorating one of several the major concerns of digital ad industry critics.
Delivery of rich creatives can be divided into several major components
- Delivery (Adserver or CDN)
- Creative Compilation / Configuration
- Reporting / Analytics
Broadstreet attempted all three. Paper G / Thunder attempted creative compilation AND reporting. Of course, they're criticised for reporting that can't be customized.
Creatives must eventually allow pluggability. How far this system goes toward pluggability requires thought, but:
- Delivery mechanism should be pluggable (maybe simple CDN delivery?)
- Reporting / analytics mechanism should be pluggable
Offload all non-core and risk/time-suck/cost-creating requirements to third parties who want to play that game. Make formats as pluggable as possible.
Validate and compile creatives defined in JSON
Example
> const creative = require('creative-json')
> let impl = JSON.parse(fs.readFileSync('sample-creatives/simple.json' ,'utf-8'))
> creative.validate(impl)
true
> creative.validateFile('sample-creatives/simple.json')
true
> creative.validateRemote('https://parkavegarage.com/some-valid-creative.json', function (err, valid) {
if (!err && valid)
console.log (valid)
else
console.log (`Error: ${err}`)
})
true
> const inputs = { name: 'Broadstreet Ads' }
> const impl = JSON.parse(fs.readFileSync('sample-creatives/simple.json' ,'utf-8'))
> creative.compile(impl, inputs)
<style>/* CSS: Broadstreet Ads *\/</style><div><!-- HTML:Broadstreet Ads --></div><script>// JS:Broadstreet Ads</script>
- creative
- ~validate(creative) ⇒
boolean
- ~validateFile(file) ⇒
boolean
- ~validateRemote(url, cb)
- ~compile(creative, inputs) ⇒
string
- ~getTemplate() ⇒
object
- ~validate(creative) ⇒
Validate a creative implementation against the creative.json schema
Kind: inner method of creative
Param | Type | Description |
---|---|---|
creative | creative |
The input creative object |
Validate a creative stored in a file and specified via creation.json format
Kind: inner method of creative
Param | Type | Description |
---|---|---|
file | string |
The path to the creative file |
Validate a remote creative specified via creative.json format
Kind: inner method of creative
Param | Type | Description |
---|---|---|
url | string |
A URL to a creative specified in creative.json format |
cb | function |
A callback (err, result:boolean) |
Compile a creative to HTML given inputs
Kind: inner method of creative
Returns: string
- - HTML
Param | Type | Description |
---|---|---|
creative | creative |
the creative |
inputs | inputs |
the input hash |
Get a minimally valid creative. Useful as a template for new creatives
Kind: inner method of creative
%%schema%%
Article, comments are good too: https://adexchanger.com/data-driven-thinking/everyone-trying-kill-rich-media/ https://www.makethunder.com/about
© 2018 Broadstreet Ads <[email protected]>.