Chameleon Support for NAAD System

Chameleon has added support for the National Alert Aggregation & Dissemination (NAAD) System. This is Canada’s national public alert system which delivers critical and potentially life-saving alerts to Canadians through television, radio and wireless devices.

Bannister Lake provides a parser to the TCP push feed which customers can run locally. Alerts are also made available on the Bannister Lake Community cloud service providing a RESTful api to access alerts organized into provinces and regions.

Chameleon consumes all required and optional data from the feed and includes fields for immediate wireless and broadcast messages.

Bannister Lake has also built a web widget which broadcasters can use on their websites and news broadcasts. The source code is made free of charge to all Chameleon customers.

Polls Support in Chameleon

Chameleon now offers an easy way to add polls support in Chameleon. In Chameleon’s web interface Flow, polls are a new data type:

To create a poll, it’s as simple as entering a question:

And choices:

There are options to set a start and stop time for when a poll is active, but after the poll is defined, it’s just a matter of publishing the poll and it’s ready for primetime.

Each poll has a unique id which is reflected in the url for the poll:

Once the poll is published, it’s just a matter of using the poll on a website. For example, it can be included on a web page using an iframe or embed html tag. A poll can be reused by republishing while keeping the url intact.

You can even have a QR code take you to the poll:

Polls in Chameleon have full support from players and Chameleon’s restful api BLADE. Additional formatting of polls can be done by inserting html tags into poll questions and choices. And there is support for including images for questions and choices.

The implementation allows for any instance of Chameleon either on the cloud or internally to use polls. On the web-side we use the React library providing responsiveness for all platforms including phones, tablets, PCs and more. On the cloud side, our implementation is AWS’ Elastic Beanstalk and the DynamoDB providing a platform for high capacity access.

Polls come standard with all instances of Chameleon. It’s another exciting piece of the Chameleon ecosystem.

UEFA European Championship

Bannister Lake is pleased to be part of the team bringing the UEFA European Championship broadcast coverage to Canada. The tournament was originally scheduled for 2020 but was rescheduled to begin today. It is being held in 11 cities in 11 UEFA countries as a celebration of the event’s 60th anniversary. The 24 teams will be vying for what is one of the premier soccer events on the planet. Portugal will be defending its 2016 win.

Bannister Lake provided both a scorebug and graphics for the Canadian broadcasts on TSN and CTV. The software included client/server architecture allowing a single operator to control unlimited concurrent games. Bannister Lake provided a custom application using the Ross Video XPression api as the CG platform.

Bannister Lake Announces Integration with Traffic Systems using the BXF SMPTE Standard

In an effort to provide improved integration between broadcast branding and traffic systems, Bannister Lake’s Chameleon has added support for reading playlists using BXF, the SMPTE standard for data exchange in the broadcasting industry.

By reading traffic playlists directly, Chameleon provides a way to bypass automation systems for triggering secondary events like snipes and bugs. The playlist data is moved directly into Chameleon’s schedule providing tight integration with graphics and data.

To help in viewing the secondary events, Chameleon now also supports viewing segments in the schedule. This makes it easier to view the timing of assets and offers a way to safely adjust or manually add new ones.

Another new feature is to clearly mark assets which haven’t been fully defined. In this way, assets that aren’t currently in the database can be scheduled but can be clearly marked as requiring definition.

For more information on Chameleon integration with WideOrbit, contact us at

Chameleon CG – Flexible Preview Channel Among Other Things

Chameleon CG has a designer application where all graphics are created. It looks similar to a traditional CG:

But it departs traditions on the playout side. Any scene created in the Chameleon CG is published to the Chameleon database ready to be utilized as a template for branding assets or the sequencer. Triggering isn’t done by the Designer application but instead from the standard Chameleon web interface called Flow. Once a template is published, everything happens in Flow from creating assets to triggering them to the program and preview channels..

This means there isn’t anything needed to install locally to use the Chameleon CG. And there is no limit of what platform Chameleon CG supports because any platform that has a web browser supports the Chameleon CG including mobile phones, tablets, Raspberry pi, Mac, Linux, Windows,…

To aid in flexibility, any Chameleon instance can support unlimited channels. If a template is published, it has the potential to be used by multiple channels and all triggered from Flow. In fact, a single instance of Chameleon can be shared by multiple unrelated broadcasters through Chameleon’s silo mechanism, content groups; a further way to monetize a single instance of Chameleon for unrelated events, channels or broadcasters.

Rendering can happen to a browser, NDI or SDI depending on the player being utilized. Preview channels can also be defined and rendered to a browser, NDI or SDI. Furthermore, one can have a program channel render to SDI and the preview channel to a browser or the other way around. Whatever makes sense. In this example, we’re rendering both program and preview channels to a browser. The left browser window is the program channel and the right browser window is the preview channel.

This all works well for a remote production since Chameleon has been tuned for cloud support and the production team can trigger all graphics from their web browser.

Our NAB 2009 Discovery

The 2009 NAB Show was held between April 18th and 23rd with registration down 20% to just over 80,000 attendees. The exhibitors included established names such as Adobe, Canon, JVC, Microsoft, SAT-GE, Tektronix, 3M, Altera, Cisco, Verizon and Xilinx and promising names like Qualstar, Bogen Imaging, Dayport, LEN, Trilithic and YellowBrix. Cheers and Frasier actor Kelsey Grammer received the inaugural Television Chairman’s Award.

Bannister Lake had made a decision to find another platform for developing broadcast graphics applications and used NAB 2009 as our place for discovery. Up until then, we had settled on Inscriber and the RTX api but we had concerns about using only one platform. Our focus was to find the next dev platform for our broadcast applications. There were several candidates and we did our homework prior to the show. Francis, D’Arcy and I met with all the potential partners. Some looked promising, others not so much. On the Wednesday of the show, Francis and D’Arcy stumbled on a product that wasn’t on our radar prior to the show. It was a recent acquisition by Ross Video. The company was Media Refinery and the product was XPression.

With the show nearing its close on Thursday, Francis and D’Arcy dragged me into the Ross booth and an acquaintance from our Inscriber days, Hans Bijlsma, gave us a demo of XPression. The first thing that impressed me was how quickly it installed. No reboot! I didn’t get a full appreciation of the api yet but XPression looked like it could do everything we needed graphically. I remember closing the 2009 NAB show sipping champagne in the Ross booth. Francis and I had found our new platform.

Over the coming years, we developed ticker, branding, scorebug, elections and other custom solutions using XPression. We even developed a ticker and branding solution which Ross Video started OEMing in 2013 and is still having success today. A lot has changed over the years in how we use XPression but it continues to be a successful development platform for Bannister Lake.

Chameleon: An Open Platform for Developers and Users

Chameleon at its core is a database with a flexible database schema which can be used to contain almost any type of data. Through our hybrid design using the best of relational and key/value pair design, it becomes an ideal warehouse for data. And with a powerful web interface, users can organize data in unlimited ways.

What is less known about Chameleon are some of the more technical aspects, namely its capability as an open platform for developers and users. Here are some of the highlights: 

    • Chameleon API for writing graphics apps using Chameleon or external data
    • Open database design allowing 3rd parties to add parsers and other data related services
    • SDK for tight integration to Chameleon’s ticker and branding resources
    • BLADE – RESTful api providing endpoints to all containers in multiple formats
    • Community support – sharing data between instances of Chameleon
    • Dynamic Tags – foundation for extending existing data types
    • Custom data type when there isn’t a fit with one of the other standard data types
    • Query data type for creating dynamic playlists using any and all Chameleon data
    • Scripting support for html5 Designer
    • OEM Support and Interface Skinning/Feature Hiding


All the rendering for our html5 graphics is done on the client side (JavaScript on a client’s browser). But there’s a pipe of data between an application we call the Chameleon Web Server to tell JavaScript what project, scene and data mappings to use for each render.

The Chameleon.api is an interface to the Chameleon Web Server to allow it to do more than just tickers. This interface listens for commands to show a scene with a set of key/value pairs to map to fields in the scene. The api is a simple interface to load projects, set scenes online or offline, update an existing scene and a callback to signal the end of a render.

The Chameleon.api is available in nuget to integrate into 3rd party applications. Those applications might be scorebugs, sequencers or any custom requirement for rendering graphics. In fact, Bannister Lake uses this api for some of their own applications like the Branding and Elections Player.

We encourage developers to use the Chameleon.api to create the next great graphics application.

Open Database

Chameleon uses MySQL as its database system. It is an open-source relational database management system. It is a free and open-source software under the terms of the GNU General Public License and is also available under a variety of proprietary licenses. There are derivatives to MySQL such as MariaDB and others.

We learned early on that Bannister Lake could never provide all the data resources to populate our database. Language limitations limit our capability of writing resources for datafeeds of character sets like Kanji. We certainly can contain that data in Chameleon but without language experts, we have no way of interpreting the data.

For this reason, our goal was to open up the Chameleon database to internal and 3rd party developers to create parsers or any other data script for our Chameleon customers. For that purpose, we have made access to the Chameleon database open by providing common MySQL credentials to allow access to MySQL Workbench and MySQL connection tools for any type of software development. We even provide sample source code to parsers.


All of Chameleon’s data/containers can be used in a loose fashion through BLADE. It’s a powerful way to support all platforms including web widgets, character generators and digital signage. However, Chameleon allows for tighter integration of graphics through its SDK. This allows for tickers to use rundowns and branding assets.

Tight integration also requires publishing information about graphics to the database. This provides templates for generating bugs or snipes. It also provides the magic to include data containers for a rundown’s zones.

The SDK itself is on the playout side for creating players that can use all these database resources for tickers and branding. For tickers, it allows mapping containers to graphic zones in a ticker making it as simple as dragging a data container into a rundown. The SDK covers all the work behind the scenes to make this all work.

For example, here is a rundown for a zone in a show (our term for a group of zones)Zone Selection Rundown

Using the information in the database when graphics are published, rundowns know what types of containers it can support. This tight integration of graphics also extends to branding assets. Here’s an asset defined to provide a countdown clock bug to Christmas:

Asset Editing - Countdown

When a platform supports these graphics-based resources in the Chameleon database, we call the platform tightly coupled. Once tightly coupled, a platform has some magic behind it where tickers and branding are all defined in Flow, Chameleon’s web interface.

The interface to the SDK for providing tightly coupled support is a series of methods that are not unlike the Chameleon.api where it supports information about bringing scenes online or offline and updating. It’s even possible to have an SDK implementation support Chameleon.api to provide additional 3rd party development support.


Chameleon has an endless supply of data containers. Those containers might be a broadcast channel’s program schedule, world news, league scores, stock index quotes or weather for a group of cities. Each container has an endpoint for acquiring the data from a url to be used with any platform whether it’s a ticker (broadcast, digital signage, streaming,…), website, branding or character generator.

BLADE (Bannister Lake Active Data Exchange) is a RESTful api to all that data. There is a url to pull any Chameleon container. Not only that, Flow provides a page to discover the urls. For example, if we wanted to find the json url for getting the Dow Jones 30 components, Flow’s BLADE discovery page makes it easy. No docs to read. Just pick what you want:Bannister Lake BLADE UI

The url discovered here is an active and live resource located on one of our cloud instances and formatted in json. Go ahead and give it a try:

Originally, BL created a central location to store useful information like sports scores or weather forecasts. This was intended as a data resource for our customers. We also opened it up so that data providers could login to an instance of Chameleon and edit their own data for broadcasting purposes.

But we went further with this idea. What we came up with is a way to share data between any Chameleon instance. Basically, Community Support provides a way of syncing a container with a container from another Chameleon instance (another database) or even between content groups of the same Chameleon instance. We call these container to container syncs maps.

In Flow, users can setup maps by defining the Chameleon instance source and then mapping a source container to a destination container:

In this example, we’re mapping the Chameleon instance located at all the sport scores for leagues MLB, MLS, NBA, NFL and NHL. We support mapping of most Chameleon containers, even query source containers (mapped to Custom).

Dynamic Tags (aka Dynamic Fields)

Early on in the design of Chameleon, we found the need to extend existing data types with additional fields. For example, each sport has unique data beyond team names, scores and status. While baseball might need information on who is up to bat, the count, team errors and so much more, a sport like hockey might need shots on goal, hits, penalty/power play information. There are 2 ways to approach this problem. Either add new fields to a relational data table (forever) or attach additional data to a core data type. We chose the 2nd method. All of the Chameleon data types have support for extending data by attaching dynamic tags to records. These dynamic tags can be text, numbers, dates, boolean, json or media. We even went all in on this idea by having a data type we call Custom which is essentially just dynamic tags.

For example, here’s a simple dynamic tag providing a logo for episodes of Bonanza:

And here are dynamic tags for an NHL player:

Note that we are working on a new data type for dynamic tags: set. Basically, a set is a set of dynamic tags. This is a way for any dynamic tag to reference a set of dynamic tags providing full hierarchy of data. This could be used to store season or game information for players or teams. It could also be used to store different language versions for a story.

Custom Data Type

Not all data fits into standard Chameleon data types such as story, weather or finance. That’s where the Custom data type comes in. It is essentially key/value pairs attached to records. Chameleon calls these key/value pairs dynamic tags or dynamic fields. Although all the other data types have key/value pair support, the Custom data type is exclusively key/value pairs. Any 2 dimensional data is a good candidate for using the Custom data type. For example, a spreadsheet is a good example of what is a good fit for Custom where each column is a field and each row are the values to a record.

A good example of the use of Custom is containing COVID-19 data. For example, here is Canadian COVID-19 data organized by province: Here we’re showing some of the fields for the province of Quebec.

Another example is organizing medal counts for events like the Winter Olympics:

Like all dynamic tags in Chameleon, key/value pairs can be strings, dates, numbers, booleans or media. Custom data is organized in topics and is just another container to Chameleon where it can be used like any other container.

Query Data Type

Query is Chameleon’s method for creating dynamic playlists and to format data in a precise way. For example, if we had all the Dow Jones components in a Financial container ordered ascending by symbol: 

What if we wanted the data sorted descending by volume? One could create a playlist and manually order by volume but when the markets are open, the data is highly dynamic. That’s where Query comes in. It can create dynamic playlists. And these playlists are treated like any other container in Chameleon with the difference being the query behind it gets executed whenever utilizing the container. 

Query is based on writing SQL SELECT statements. These statements are what get executed on the container. Any data in the database is fair game for query. Here’s an example of the SELECT statement behind a query for getting the top 10 volume leaders for the Dow Jones 30 components:

The above query gives us:

Designer Scripting

Most character generators or graphics environments have some form of scripting support. Chameleon’s web renderer is no different in that respect. It allows writing scripts to accomplish dynamic tasks. For example, here’s a script for a scene that shows sports scores. It will mark the team with the colour red if the team is leading or has won: 

Designer uses CoffeeScript as its scripting language which gets translated to JavaScript at render.

OEM Support and Interface Skinning/Feature Hiding

Chameleon’s most visible interface is Flow. Flow is the web interface which provides access to the world of Chameleon; not just the data but the operational aspects of data like triggering graphics. From the beginning, Flow provided support for skinning Flow. For example, each election, we’d provide a different skin for our election users. We also provide support for hiding features so users aren’t bombarded with things they don’t need or want.

Flow can easily hide content by turning on and off features. If an instance of Chameleon is used for only sharing/working with certain data types, it’s easy to hide features. For example, here is what is available for our Community instance:

While an instance like our Chameleon cloud instance provides more functionality for playing out graphics:

It’s also possible to skin Flow for any purpose whether it’s for OEM partners, internal customer support or distinguishing between instances. Here are a few examples of Flow headers:

In the last example, it shows an example of Chameleon as an OEM product for Ross Video. We are seeking interest from new OEM partners who wish to integrate Chameleon into their own product eco-system. Everyone needs good data so Chameleon is an excellent fit for many products.

Bannister Lake Drives Global Television’s Coverage of Three Canadian Provincial Elections On-Air and Online

Bannister Lake is pleased to announce today that it played an instrumental role in the production of three recent Global News provincial election specials. The company’s Elector software was used by editorial teams in British Columbia, Saskatchewan and New Brunswick to track results, make race calls and manage full frame graphic and ticker playout. Bannister Lake also provided custom software development services creating interactive web widgets. The web widgets were used to visualize results on on-set touchscreens that allowed analysts to navigate through various provincial ridings and pinpoint election results. In addition to results data, the widgets included other contextual datasets including demographics and historical voting outcomes. A second set of widgets were created and fully integrated into the website providing users with access to election results in a fully interactive format that could be accessed by any device.

“We have a longstanding relationship with Bannister Lake and having them add their expertise to our online election coverage not only improved the overall web experience, it created a strong sense of consistency across both our properties”, said Gerry Belec, Director – News Technology and Operations, Global News.

Global took full advantage of Bannister Lake’s HTML5 capabilities and integrated election results data directly into VizRT graphic engines that populated regional L-bars. Bannister Lake’s election data was also incorporated into Global’s News’ social media distribution efforts populating graphics announcing breaking election news.

“Our election solutions are completely agnostic and work well on any graphic engine and as our web widgets demonstrate on any device. For broadcasters using various products to reach their audiences both online and on-air, we offer exciting new ways to tell the election night story.”, said George Hentsch, President, Bannister Lake.

The Global Television Network and its parent company Corus Entertainment use Bannister Lake solutions in a variety of innovative ways. In addition to election coverage, Bannister Lake’s Chameleon data aggregation and management solution powers L-Bar graphics for both the network’s regional morning news shows and for its over the top news channels. Chameleon also powers an extensive digital signage network with localized news, weather, sports and other data-driven content.

Broadcast Graphics Expert Phil Carmichael Joins Bannister Lake

Bannister Lake is pleased to announce today that broadcast graphics industry authority Phil Carmichael will be joining the company as Director, Sales and Marketing. Phil brings decades of experience to the role in a number of capacities including product management and as a demonstration specialist. Phil began his career at CBC Calgary as a broadcast technician before focusing on broadcast graphics. As a graphic designer and operator, he specialized in sports production and worked on a wide variety of high-profile events including the Stanley Cup playoffs, Major League Baseball and the Olympic Games. Phil moved on to become a product specialist at Chyron where he worked closely with a variety of customers helping them gain a deeper understanding of both the products and associated workflows.

“We are pleased to have Phil join our team and explore new opportunities. He is well known in the world of broadcast graphics and uniquely brings experience from both an operator perspective and from a pre-sales angle”, said Georg Hentsch, president, Bannister Lake.

“I have been impressed with Bannister Lake and the Chameleon product for many years and am excited to join their efforts to bring more real-time data capabilities to broadcast graphics. The company’s dedication to product development and custom data solutions is needed in the industry and I look forward to contributing to Bannister Lake’s success”, said Phil Carmichael.

Bannister Lake’s flagship data aggregation and management product Chameleon plays an important role in broadcast, digital signage and over-the-top. As audiences’ demand for real-time data continues to increase, Chameleon provides producers with new opportunities to enhance storytelling with data visualization, improve production workflows and create exciting new business opportunities.

CustomWeather and Bannister Lake Form Partnership to Create New Business Opportunities in Broadcast and Digital Signage

Bannister Lake and CustomWeather  announced today that they have entered into a partnership to develop joint business opportunities and enable users of Bannister Lake’s Chameleon software to incorporate weather data from specialized weather company, CustomWeather, Inc. CustomWeather is an industry-leading weather data provider featuring forecasts for 85,000 global locations in 95 languages, providing high-resolution forecasts from its proven forecasting model, the CW100.

Bannister Lake’s Chameleon product is an innovative real-time data aggregation and management solution used throughout the broadcast and digital signage industry to power and populate graphic templates. The solution drives news tickers, election results, financial data, wagering, and other editorial applications. Chameleon is also used for on-air branding applications, controlling and populating snipes, bugs, promos, and “coming up next” boards. Chameleon’s RESTful API allows data to be reformatted and strategically distributed to broadcast graphic engines, as HTML5, and be integrated into mobile applications.

 “Bannister Lake’s Chameleon software offers a novel way for us to expand our reach in the broadcast and digital signage market,” said Geoff Flint, President and CEO of CustomWeather. “Our superior weather products combined with Bannister Lake’s expertise in managing real-time data and custom development offers tremendous value to their customers.”

“CustomWeather is an ideal partner for Bannister Lake. Weather data is an important data source for our customer base and CustomWeather’s accuracy and assortment of data products provides an attractive offering for both the broadcast and digital signage market”, said Georg Hentsch, President, Bannister Lake.

Both CustomWeather and Bannister Lake will actively pursue opportunities that leverage each others expertise in creating real-time data and custom software solutions. As data specialists with strong development skills in database, APIs, and applications, Bannister Lake designs, builds, and implements solutions that utilize editorially relevant data sources, such as CustomWeather, to engage audiences and attract advertising revenue.